【发布时间】:2015-01-09 19:27:29
【问题描述】:
这个使用未装箱闭包的小 FizzBuzz 程序给出了一个相当神秘的错误消息。
fn fizzbuzz<F: Fn(i64) -> bool>(n: i64, f: F, fs: &str, b: F, bs: &str) {
for i in range(1i64, n+1) {
match (f(i), b(i)) {
(true, true) => println!("{:3}: {}{}", i, fs, bs),
(true, _) => println!("{:3}: {}", i, fs),
(_, true) => println!("{:3}: {}", i, bs),
_ => (),
}
}
}
fn main() {
fizzbuzz(30,
|&: i: i64| { i % 3 == 0 }, "fizz",
|&: j: i64| { j % 5 == 0 }, "buzz");
}
错误信息:
<anon>:15:14: 15:40 error: mismatched types: expected `closure[<anon>:14:14: 14:40]`, found `closure[<anon>:15:14: 15:40]` (expected closure, found a different closure)
<anon>:15 |&: j: i64| { j % 5 == 0 }, "buzz");
^~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
有人能描述一下错误吗?谢谢。
【问题讨论】:
-
请在问题正文中包含回答您的问题所需的所有详细信息(即代码)。问题不应该依赖于外部链接,因为从长远来看它们往往会中断,我们正在尝试建立一个长期资源。干杯。
-
请在您的问题中直接包含相关(且仅相关)代码和错误消息,而不是要求人们点击可能不可信的链接。
标签: rust