我正在阅读《精通Rust》一书。第一章末尾有一个练习,提供了示例代码,任务是通过使用通常很有帮助的编译器错误消息来修复它。
我本来以为以下内容是错误的,但实际上并不是。
为了完整的上下文,我有整个代码的gist。那是我修复后的代码,相关的行是37和38。但需要将一个文本文件作为参数输入。
我原本预计会出现一个错误,因为
关于内存管理和堆栈,底层发生了什么?我假设
我可以使用不同大小的东西吗?第二行可以说:
在这种情况下,对象本身位于栈上,并且它的大小可能大于
我本来以为以下内容是错误的,但实际上并不是。
for line in reader.lines() {
let line = line.expect("Could not read line.");
为了完整的上下文,我有整个代码的gist。那是我修复后的代码,相关的行是37和38。但需要将一个文本文件作为参数输入。
我原本预计会出现一个错误,因为
line
在堆栈上(至少指针是)。它是否正确,即使没有投诉,它仍然可以被销毁和替换?关于内存管理和堆栈,底层发生了什么?我假设
line
实际上是对字符串的引用(&str
类型)。所以,这是可以的,因为无论哪种情况,指针本身 - 堆栈上的对象 - 只是一个usize
,因此两个line
对象在堆栈上的大小相同。我可以使用不同大小的东西吗?第二行可以说:
let line: f64 = 3.42;
在这种情况下,对象本身位于栈上,并且它的大小可能大于
usize
。