我试图读取以下2个函数的参数列表:
1. def foo(action: => String => String) = "bar"
2. def foo(action: => () => String => String) = "bar"
Run Code Online (Sandbox Code Playgroud)
Des*_*tin 13
action是一个传递名称的函数,它接受一个String并返回一个String.action是一个名为pass-by-name的函数,它不需要返回一个带a String和返回a 的函数String现在你可能会问,"那么,一个参数可以通过名字传递是什么意思?" 好吧......那是一整套不同的蠕虫.基本上,传递名称参数仅在函数中使用时以及每次在函数中使用时进行评估.这允许的是短路,如下所示
def orOperator(left: Boolean, right: => Boolean) : Boolean = if (left) true else right
Run Code Online (Sandbox Code Playgroud)
在这种情况下,right如果发现left是真的,操作员将短路(并且在没有计算/评估的情况下终止).
那么......你对这些参数的看法是类似的.它们是由于某种原因不进行评估的函数 - 除非/直到它们在函数体中命名.我不明白其动机,但......就是这样.我希望有所帮助.