【发布时间】:2015-01-09 14:11:33
【问题描述】:
我遇到了一个看起来像这样的函数:
def doSomethingQuestionable(config: someConfig, value: String)(default: => String) : String
有趣的是作为第二个参数组传入的无参数函数。在代码库中,该方法只使用一个配置和两个字符串调用,后者是一些默认值,但作为一个字符串,而不是一个函数。在方法的代码主体中,默认值被传递给采用 3 个字符串参数的方法。所以函数“default”只解析为这个方法体中的一个字符串。
除了在我正在经历的代码库中这种方法不会发生的柯里化用法之外,以这种方式定义方法还有什么好处吗?为什么不在单个参数组中使用 3 个字符串参数来定义它?
我错过了什么?这里有一些编译器优势吗?请记住,我假设永远不会使用此方法进行柯里化,因为它是一个庞大的代码库,目前还没有使用此方法完成。
【问题讨论】:
-
将参数拆分为 2 个列表允许在某些特定情况下进行类型推断:stackoverflow.com/questions/13868085
-
default是“按名称调用”参数。它由函数懒惰地评估(如果不需要,则根本不评估)。 -
人们喜欢这种语法:
f(a, b) { val s = "hi" ; s }。 artima.com/pins1ed/control-abstraction.html#9.4
标签: scala functional-programming