【发布时间】:2017-06-28 16:35:14
【问题描述】:
我在我正在研究的一个 Scheme 解释器中找到了下面的类型别名。在评估 AST 时,它将函数识别为原生支持的函数或用户定义的函数。我理解Enum 定义的第二部分,但第一部分让我无法理解。
pub enum Function {
Native(ValueOperation),
Scheme(Vec<String>, Vec<Value>, Rc<RefCell<Environment>>),
}
type ValueOperation = fn(&[Value], Rc<RefCell<Environment>>) -> Result<Value, RuntimeError>;
这种类型别名如何工作?这个定义是否说 ValueOperation 只是函数签名的简写?我在官方文档/书籍中找不到任何提及此成语的内容。
为函数签名定义类型别名的目的是什么?你能用它“做什么”?它是某种函数指针吗?
【问题讨论】:
-
类型别名在Type Aliases section of the book中解释;有什么不清楚的地方吗?
-
是的。即,为函数签名定义类型别名的目的是什么?你能用它“做什么”?它是某种函数指针吗?
-
这不是函数签名;它是一个函数指针类型。
const X: i32 = 0;是i32,因为fn f(i32) -> String { ... }是fn(i32) -> String。它是一种与任何其他类型一样的类型。所有这一切都是用给定的签名定义一个函数指针类型。涉及类型别名是无关紧要的;它不会改变任何东西。