【发布时间】:2020-12-30 13:55:21
【问题描述】:
我正在尝试在函数式语言中做一些正常的事情,即 {F#, SML, OCaml, Haskel..} 将函数作为输入和输出传递。 但我认为在 Rust 类型系统方面我还没有退出。下面的代码是我的代码中出错的部分。简而言之,我正在制作一个包含一个函数的结构,它会做一些事情并返回一些可能出现错误的其他事情。 or 函数有问题,因为我需要在将来的某个时间将输入传递给我正在使用闭包的 run 函数。我已经尝试使用 Fn 作为类型,但它仍然使编译器出错。
pub struct Pattern<T>{
pat : fn(&str) -> Result<(T, &str),&'static str>
}
impl<T> Pattern<T> {
pub fn run(self, input: &str) -> Result<(T,& str), &'static str> {
(self.pat)(input)
}
pub fn or(self, pat: Pattern<T>) -> Pattern<T> {
Pattern {
pat: |input| match self.run(input) {
Ok(ret) => Ok(ret),
Err(msg) => {
match pat.run(input) {
Ok(ret) => Ok(ret),
Err(msg) => Err(msg),
}
}
}
}
}
}
【问题讨论】:
-
看起来您的代码被截断了另一个问题,在 of 方法中,您使用的是未定义的 pat1 和 pat2 变量.
-
试图让它工作的小错字。但是还是不行