【发布时间】:2019-07-02 16:07:33
【问题描述】:
如何获取函数参数 AST 变体的向量、提取值并使用它们来实例化函数调用?
我正在编写一个解释器来评估某些表达式。一些表达式是函数调用。我很难弄清楚如何将函数调用 AST 转换为实际调用。 AST 给了我函数名和参数向量。我可以使用映射从名称中查找要调用的函数指针,但是将参数传递给函数指针是有问题的。
Rust 没有 splat 运算符(参数扩展)。我可以将它们作为元组传递并使用参数的解构,但我不知道如何将 AST 参数枚举变量的向量转换为具体类型的元组。
我不能简单地映射或循环 AST 参数来提取值并生成一个元组。
我可以使用嵌套元组逐步构建异构列表:
fn prepend<I,T>(i: I, t: T) -> (I,T) { (i, t) }
fn foo() {
let x = ();
let x = prepend(1, x);
let x = prepend(2.0, x);
let x = prepend(true, x);
}
但这只是因为x 被遮蔽并且新绑定具有不同的类型。这行不通:
fn foo() {
let mut x = ();
x = prepend(1, x);
x = prepend(2.0, x);
x = prepend(true, x);
}
有什么想法吗?
【问题讨论】:
标签: function dynamic rust interpreter