【发布时间】:2011-11-08 21:47:54
【问题描述】:
我试图理解多参数子句的这种语言特性的意义以及你为什么要使用它。 例如,这两个函数到底有什么区别?
class WTF {
def TwoParamClauses(x : Int)(y: Int) = x + y
def OneParamClause(x: Int, y : Int) = x + y
}
>> val underTest = new WTF
>> underTest.TwoParamClauses(1)(1) // result is '2'
>> underTest.OneParamClause(1,1) // result is '2'
Scala specification at point 4.6 中有相关内容。看看这对你是否有意义。
注意:规范称这些为“参数子句”,但我认为有些人也可能称它们为“参数列表”。
【问题讨论】:
-
这里是非 scala 程序员。也许只是风格不同?并非所有事情都必须只有一种方法。
-
好的,Daniel Sobral 对stackoverflow.com/questions/4697404/…987654322@的回答中有一些答案
-
这里接受的答案可能回答了这个问题:(1)所以您不必在第二个子句中的第一个参数子句中指定类型; (2) 库设计的灵活性; (3) 让currying更容易:stackoverflow.com/questions/4915027/…
-
好吧,这真的困扰我。 帖子中没有明确的函数——只有方法。函数是一等值,而方法不是。方法是对象的“一部分”,是对象“知道如何响应”的东西。函数是具有应用方法的对象(FunctionN/PartialFunctionN 类型)——应用方法不是函数。记住这一点很重要,因为方法和函数的规则不同。例如,函数不能重载,方法(没有隐式转换为函数)不能作为函数传递。
-
@pst,虽然我同意这种观点,但我惊讶地发现Scala Language Spec(第 4.6 节,函数声明)将方法称为特定类型的函数。也许,准确地说,最好区分方法和函数对象。
标签: scala functional-programming currying