這裏是你如何可以寫你的例子:
const FRUITS: [&'static str; 3] = ["apple", "banana", "coconut"];
fn is_available(desired: &str) -> bool {
for &el in FRUITS.iter() {
// let() = el; // PROTIP
if el == desired {
return true;
}
}
false
}
看到我分配給el
()
?這是一個小技巧,可以查看某個變量的類型。如果取消對,你會得到這樣的錯誤:
error: mismatched types:
expected `&&str`,
found `()`
這讓你知道的類型是什麼。第二部分是看的PartialEq
的實現爲str
,最重要的一個是:
impl PartialEq<str> for str
所以我們用一個模式綁定el
即會自動解除引用一次我們。則比較可能發生,因爲我們有提領的平衡量做:
for &el in FRUITS.iter() {
// ^~~ Here
不過說真的,我會寫這樣的:
static FRUITS: [&'static str; 3] = ["apple", "banana", "coconut"];
fn main() {
let desired = "apple";
let to_eat = FRUITS.iter().find(|&&f| f == desired);
println!("{:?}", to_eat);
let desired = "durian";
let to_eat = FRUITS.iter().find(|&&f| f == desired);
println!("{:?}", to_eat);
}
static
建立在實際的共享位置內存的變量。 const
更像C- 值被插入到使用的任何地方。由於find
返回項目,我們需要它有一些存儲持續時間比一個表達式更長。
IteratorExt::find
也抽象找到匹配值(對於某些條件)的工作,並返回表示成功/失敗的Option
。
什麼是「目標」? – huon 2015-03-24 21:48:23
爲什麼你寫'el.eq(target)'而不是'el == target'? – 2015-03-24 22:25:44
@ huon-dbaupp:我在數組中搜索的字符串 – 2015-03-24 22:28:51