2012-02-07 74 views
2

任何人都可以给我解释如何在scala编译器内部调用名称? 该方法的句法快捷方式将如此:arg:=>Int将转换为arg:() => Int并捕获传递给函数的参数,闭包如何? 即即时类型的名称参数如:Function0[_]call-by-name参数

谢谢。

+1

你想做什么?问题不明确。 – 2012-02-07 17:59:58

+0

@ DanielC.Sobral嗨。让我们假设我想要类似这样的:'def foo(i:=> Int):[Int,Function1 [这里需要'call-by-name'参数的类型,或者[_,_]]]''。 **我怎么写它?**纯粹假设的问题...... – dvigal 2012-02-07 18:38:50

回答

3

如果我正确地理解了这个问题,是的,语法=> Int本质上是一个匿名无参数函数() => Int的轻量级语法,在Scala中由类型Function0[Int]表示。而且,在VM by-name参数内部转换为内部类。

4

按照您自己的发现,名称参数参数可以解析为Function0[A]。他们没有一流的支持,因此没有其他类型的支持。

您可以使用Scalaz的Name来实现这些行。为此,请参阅接受的答案here

1

有没有这样的事情,“类型的名称”。 By-name不是一个类型,它是一个参数传递模式。

您可以使用Function0来代替正在通过名称传递但具有不同语义的参数。