我正在努力学习Rust中内存的来龙去脉.在函数内部创建向量然后返回时,是返回引用还是复制整个向量?
例:
use std::io;
fn line_to_ints() -> Vec<u32> {
let mut line = String::new();
io::stdin()
.read_line(&mut line)
.expect("Failed to read line");
return line
.split(" ")
.map(|x| x.parse().expect("Not an integer!"))
.collect();
}
Run Code Online (Sandbox Code Playgroud)
对于所有其他非原始数据类型,此处的返回行为是否也相同?
与是否有任何方法可以返回对函数中创建的变量的引用?,我想更多地了解引擎盖下发生的事情.该问题的答案并没有提供关于是否创建向量然后将其复制到新位置的清晰度,或者返回指针的所有权我知道向量是在堆上创建的,所以我想象一个指针.
我在使用 Go with 读取 stdin 时遇到了一些麻烦bufio.Scanner。
假设我有这样的输入
1 5
2 3
4 5
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过调用此函数来读取每一行:
1 5
2 3
4 5
Run Code Online (Sandbox Code Playgroud)
在给get_arg_multi_int我打了三个电话后,我希望params(每次)被填充为:
[1, 5]
[2, 3]
[4, 5]
Run Code Online (Sandbox Code Playgroud)
相反,我得到以下信息:
[1, 5]
[]
[]
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样。我怀疑这与多次打开标准输入有关,但我似乎找不到任何(易于访问的)文档来告诉我当扫描仪超出范围时究竟会发生什么。
得知有一些更惯用的方法可以实现上述代码的目的,我不会感到惊讶,但我很好奇为什么这段代码不起作用。
有人可以评论为什么我没有看到预期的行为吗?
谢谢,