如何读取Scala函数参数链

rec*_*ant 14 scala

我试图读取以下2个函数的参数列表:

1. def foo(action: => String => String) = "bar"
2. def foo(action: => () => String => String) = "bar"
Run Code Online (Sandbox Code Playgroud)
  1. 一个名为"foo"的函数,它接收一个名为"action"的函数,它接收/返回???
  2. 一个名为"foo"的函数,它接收一个名为"action"的函数,该函数返回一个返回???的函数.

Des*_*tin 13

  1. action是一个传递名称的函数,它接受一个String并返回一个String.
  2. 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是真的,操作员将短路(并且在没有计算/评估的情况下终止).

那么......你对这些参数的看法是类似的.它们是由于某种原因不进行评估的函数 - 除非/直到它们在函数体中命名.我不明白其动机,但......就是这样.我希望有所帮助.