如何使用[Any]类型的args调用Any类型的Swift函数

时间:2019-01-09 23:36:19

标签: python swift compilation compiler-construction virtual-machine

我目前正在Swift中实现this blog post about vms and compilers in Python。我在这里遇到了问题:

我在Any中有一个函数。我在[Any]中有其论点。我想在不知道它是什么参数的情况下调用此函数。在Python帖子中,由于Python是动态的,所以很简单,但是在Swift中,我认为这是不可能的。您有什么实现方式吗?

let numberOfArgs: Int = try intify(instruction.arg)
let arguments: [Any] = (0 ..< numberOfArgs).compactMap { _ in
    return (stack.pop() as? Instruction)?.arg
}
let function: Any = try popVal(&stack)

function是一个Swift闭包。例如(Int, Int) -> Int(String, (Bool, Date) -> Date) -> Float

最后,我想用function来呼叫arguments

1 个答案:

答案 0 :(得分:1)

一种实现方法是将函数包装在setw()类型的闭包中。然后在闭合中,解压缩参数,将其转换为正确的类型并调用该函数。最后,将结果转换为setfill()

([Any]) -> Any

输出:

Any