Loops 你是如何制作铁锈系列的?
文档没有说明如何进行循环,本教程完全忽略了for循环。使用。实际上,本教程的这一部分确实涵盖了Loops 你是如何制作铁锈系列的?,loops,for-loop,range,rust,Loops,For Loop,Range,Rust,文档没有说明如何进行循环,本教程完全忽略了for循环。使用。实际上,本教程的这一部分确实涵盖了for循环: 在向量上迭代时,请改用for for elt in ["red", "green", "blue"] { std::io::println(elt); } 但是,如果需要索引,可以使用(或int::range或u8::range或u32::range或u64::range)和Rust的块语法执行以下操作: range(0u, 64u, {|i| C[i] = A[i] + B[i]
for
循环:
在向量上迭代时,请改用for
for elt in ["red", "green", "blue"] {
std::io::println(elt);
}
但是,如果需要索引,可以使用(或int::range
或u8::range
或u32::range
或u64::range
)和Rust的块语法执行以下操作:
range(0u, 64u, {|i| C[i] = A[i] + B[i]});
Rust用于支持此等效语法,但后来被删除:
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
请注意,自rustc 0.4(2012年10月)起,替代结构
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
似乎不再受支持。从1.0开始,for循环使用的值类型为
这本书在和中描述了这种技术
如果您对for循环的操作方式感兴趣,请参阅中描述的语法
例如:
fn main(){
设strs=[“红”、“绿”、“蓝”];
对于标准试验堆中的sptr.iter(){
println!(“{}”,sptr);
}
}
()
如果您只想在一个数字范围内进行迭代,如在循环的C中,您可以使用a..b
语法创建一个数字范围:
0..3中的i的{
println!(“{}”,i);
}
如果同时需要索引和数组中的元素,那么获取它们的惯用方法是:
fn main(){
设strs=[“红”、“绿”、“蓝”];
对于strs.iter().enumerate()中的(i,s){
println!(“字符串{}是{}”,i,s);
}
}
注:
- 循环项是对iteratee元素的借用引用。在本例中,
的元素具有类型str
——它们是指向静态字符串的借用指针。这意味着&'static str
具有类型sptr
,因此我们将其取消引用为&“static str
。我更喜欢的另一种形式是:*sptr
for &s in strs.iter() { println!("{}", s); }
对于范围(0,100)内的i
现在被弃用,取而代之的是对于0..100内的i
(根据rustc 1.0.0-nightly
)
另外值得注意的是,当使用范围内的标识符(例如,
表示0..a中的i
)时,编译器无法消除歧义,因此必须使用表示(0..a)中的i
,但是有人提交来解决这个问题。谢谢!我很好奇为什么Rust对函数定义和块有两种不同的语法。似乎它们可以通过重用fn(args…
而不是| args |
@mcandre实际上,Ruby风格的块语法{args | body}来避免程序员的麻烦
用于表示一个闭包而不仅仅是一个函数。它还非常方便简化匿名函数的使用,正如您在Javascript中看到的那样,因为任何接受闭包作为其最后参数的函数(如回调函数)可以在函数调用后编写,如上面Lindsey的第三个示例中所示。最后,尽管Rust有几种不同类型的闭包,但在使用块语法时,Rust可以推断出所需的闭包类型。请参见,这是否仍然有效?我无法获得要编译的range(n,n){| I |…}。我会出现奇怪的错误。从Rust 0.6开始,对于int::range()| I |{C[i]=A[i]+B[i];}应该有用。对于作为参数传递闭包的语法糖,iirc。如果有int类型,则可能重复的Take-at-identifier歧义已在中修复,现在已被弃用。他是对的。它已被删除,因此此答案已过时。如何对0..3进行rev?@EvgeniNabokov添加括号:(0..3).rev(){//Code here…}
参考:我如何使I
au8
?我在0..26{中为I:u8做了,但它不起作用。