以下定义有何不同?
1.def debug(msg: => AnyRef) = { println(String.valueOf(msg)) }
2.def debug(msg: () => AnyRef) = { println(String.valueOf(msg)) }
第一个定义可以接受任何东西,字符串或函数等,但第二个定义只能接受函数。我想知道reazon。
scala> def debug(msg: => AnyRef) = { println(String.valueOf(msg)) }
debug: (msg: => AnyRef)Unit
scala> debug("hi")
hi
scala> debug(() => "xx")
<function0>
scala> def debug(msg: () => AnyRef) = { println(String.valueOf(msg)) }
debug: (msg: () => AnyRef)Unit
scala> debug("hi")
<console>:9: error: type mismatch;
found : java.lang.String("hi")
required: () => AnyRef
debug("hi")
^
答案 0 :(得分:5)
第一个是按名称调用参数,即每次在方法中使用时都会计算参数,并且只有在使用它时才会计算参数。正如您所发现的,这可能是一种评估为所需类型的anthing。
第二个具体使用Function0[AnyRef]
个对象。您可以将()
视为空参数列表(不要与Unit
值混淆,后者写的相同)。