在Rust Book上有一個迭代器調用filter()
的例子:過濾器(| x |)和過濾器(|&x |)之間有什麼區別?
for i in (1..100).filter(|&x| x % 2 == 0) {
println!("{}", i);
}
下面有一個解釋,但我有了解它的麻煩:
This will print all of the even numbers between one and a hundred. (Note that because filter doesn't consume the elements that are being iterated over, it is passed a reference to each element, and thus the filter predicate uses the &x pattern to extract the integer itself.)
但這不起作用:
for i in (1..100).filter(|&x| *x % 2 == 0) {
println!("i={}", i);
}
爲什麼參數封閉引用|&x|
,inst ead的|x|
?那麼使用|&x|
和|x|
有什麼區別?
據我所知,使用參考|&x|
更高效,但我很困惑,因爲我不需要使用*x
取消引用x
指針。
因此'let&x = my_pointer'實際上是'let x = * my_pointer'的替代方法,它也可以在函數參數聲明中使用?如果是這樣,爲什麼使用'| x |'不會引發錯誤?從我與C的經驗來看,預計會在這裏得到一個指針。或者生鏽在這裏隱式地分配堆棧中原始'x'的值的副本? – jeremija
哦,我有很多東西要學習:)謝謝 - 現在我對它更清楚了! – jeremija