1

我正在尝试打印传递给函数的按名称调用参数,即:

def testme(arg: => Int) println(arg)

并这样称呼它:

test(sum(List(1, 2, 3))

前提是 sum 方法存在。我想testme打印sum(List(1, 2, 3))而不是总和本身。

有没有办法做到这一点?

4

1 回答 1

-1

不,不破解编译器是不可能的。当您通过 f: => A 时,调用 f 会立即对其进行评估。它永远不会是您想要的类型的中间形式,因为 scala 被编译成 java 字节码,而不是像脚本语言那样解释。

编辑:正如 Regis 指出的那样,破解编译器比使用某些语言更容易,因为 scala 通过 scala 宏向编译器公开了一个 api。它仍然相当复杂,您最好以另一种方式找出解决方案。

于 2013-09-19T20:45:13.450 回答