【发布时间】:2020-01-31 20:25:00
【问题描述】:
我正在尝试在 Rust 中实现自定义控制结构。例如,假设出于某种原因,我想将自定义 if 语句实现为函数。该函数将采用一个条件,一个代表真分支的闭包和一个代表假分支的闭包。根据情况,我会称真分支闭包或假分支闭包。
看起来像这样:
pub fn fun_if<O>(
cond: bool,
mut tbranch: impl FnMut() -> O,
mut fbranch: impl FnMut() -> O,
) -> O {
if cond {
tbranch()
} else {
fbranch()
}
}
这个实现的问题是真闭包不能可变地借用与假闭包相同的变量:
let mut test = 0;
fun_if(true, || test = 1, || test = 2)
^^^^ ^^^^ ! error !
然而,rustif 语句足够聪明,知道真假分支永远不会被调用在一起。下面的编译就好了:
let mut test = 0;
if true {
test = 1
} else {
test = 2
}
我的问题是 if 的行为是否可以在 rust 中使用函数和不安全代码进行复制。
(这是一个稍微做作的例子,如果有人感兴趣,我很乐意提供真实的例子。我在这里问的是核心思想。)
【问题讨论】: