捕获按名称调用参数的表示形式

时间:2013-09-19 20:43:23

标签: scala

我正在尝试打印传递给函数的call-by-name参数,即:

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

并称之为:

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

如果存在sum方法。 我希望testme打印sum(List(1, 2, 3))而不是总和本身。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:-1)

不,没有黑客攻击编译器是不可能的。当你通过 f:=> A,调用f立即对其进行评估。它并不是你想要的类型的中间形式,因为scala被编译成java字节代码,而不是像脚本语言一样被解释。

编辑:正如Regis所指出的,黑客编译器比在某些语言中更容易,因为scala通过scala宏向编译器公开api。它仍然相当复杂,你最好还是以另一种方式找出你的解决方案。