用def定义函数

时间:2014-08-21 20:23:03

标签: scala function

尝试重复:

scala> def add(x: Int) = 1 + x
add: (x: Int)Int

scala> add(2)
res0: Int = 3

scala> def add = (x: Int) => 1 + x
add: Int => Int

scala> add(2)
res1: Int = 3

我看到"添加"定义在repl打印的类型上有所不同。 我猜第一个定义类似于方法,第二个定义类似于函数值。

以某种方式定义添加有什么区别? 这是一种更好或不鼓励的方式吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

两种定义之间存在细微差别:

def add = (x: Int) => 1 + x

每次拨打add时,您都会创建一个新功能Int => Int。您基本上定义了一个返回函数add的无参数函数Int => Int。这将是完整的签名:

def add: (Int => Int) = (x: Int) => 1 + x

更好的写作方式:

val add = (x: Int) => 1 + x

现在您要定义一个函数Int => Int并将其分配给值add,这只会发生一次。

def add(x: Int) = 1 + x
val add = (x: Int) => 1 + x

这两个定义是等价的。