这里是你如何可以写你的例子:
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