尝试重复:
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打印的类型上有所不同。 我猜第一个定义类似于方法,第二个定义类似于函数值。
以某种方式定义添加有什么区别? 这是一种更好或不鼓励的方式吗?
感谢您的帮助。
答案 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
这两个定义是等价的。