如何读取Scala函数参数链

时间:2011-12-28 23:41:14

标签: scala

我正在尝试阅读以下两个函数的参数列表:

1. def foo(action: => String => String) = "bar"
2. def foo(action: => () => String => String) = "bar"
  1. 一个名为“foo”的函数,它接收一个名为“action”的函数,它接收/返回???
  2. 一个名为“foo”的函数,它接收一个名为“action”的函数,该函数返回一个返回???
  3. 的函数

1 个答案:

答案 0 :(得分:13)

  1. action是一个按姓名传递的函数,它使用String并返回String
  2. action是一个名为pass-by-name的函数,它不会返回一个带String并返回String
  3. 的函数

    现在你可能会问,“嗯,参数是按姓名传递的意思是什么?”好吧......那是一整套不同的蠕虫。基本上,传递名称参数仅在函数中使用时评估,并且在函数中使用的每个时间。这允许的是短路,如下所示

    def orOperator(left: Boolean, right: => Boolean) : Boolean = if (left) true else right
    

    在这种情况下,如果发现right为真,则运营商将短路(并在没有计算/评估left的情况下终止)。

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