注意:这个问题是在Rust第一次稳定发布之前提出的.之后发生了很多变化,函数中使用的语法甚至不再有效.尽管如此,Shepmaster的答案仍然非常出色,这使得这个问题值得保留.
最后,未装箱的封闭装置着陆了,所以我正在试验它们,看看你能做些什么.
我有这个简单的功能:
fn make_adder(a: int, b: int) -> || -> int {
|| a + b
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到了一个missing lifetime specifier [E0106]错误.我试图通过将返回类型更改为修复此问题||: 'static -> int,但后来又出现了另一个错误cannot infer an appropriate lifetime due to conflicting requirements.
如果我理解正确,关闭是未装箱的,所以它拥有a和b.我觉得它需要一辈子似乎很奇怪.我怎样才能解决这个问题?
我想编写一个int-returning函数,它接受一个带零参数的闭包,一个带一个参数的闭包,一个带两个参数的闭包,其中所有闭包参数都是类型int,每个闭包返回f32.
这个函数的签名是什么样的?
现在我想接受通过Fn和FnMut特征.签名是什么样的?是否需要使用箱子中的功能?如果是这样,哪些是为什么?
如果知道:它看起来像糖?脱?
如果知道:未来可能会发生什么变化?
在Clojure中,我使用了一个名为iterate:
返回x,(fx),(f(fx))等的延迟序列.f必须没有副作用
Rust中有类似的东西吗?
例如,我有这个函数,我想传递给一个带有数字的函数,然后迭代一个流/范围/向量,直到找到Some(1):
fn coltz(n: u64) -> Option<u64> {
match n % 2 {
0 => Some(n / 2),
_ => Some(3 * n + 1)
}
}
Run Code Online (Sandbox Code Playgroud) rust ×3