试试repl:
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
Run Code Online (Sandbox Code Playgroud)
我看到"添加"定义在repl打印的类型上有所不同.我猜第一个定义类似于方法,第二个定义类似于函数值.
以某种方式定义添加有什么区别?这是一种更好或沮丧的方式吗?
谢谢您的帮助.
两种定义之间存在细微差别:
def add = (x: Int) => 1 + x
Run Code Online (Sandbox Code Playgroud)
每次打电话给add你时都会创建一个新功能Int => Int.您基本上定义了一个add返回函数的无参数函数Int => Int.这将是完整的签名:
def add: (Int => Int) = (x: Int) => 1 + x
Run Code Online (Sandbox Code Playgroud)
写一个更好的方法:
val add = (x: Int) => 1 + x
Run Code Online (Sandbox Code Playgroud)
现在,您正在定义一个函数Int => Int并将其赋值给该值add,这只会发生一次.
def add(x: Int) = 1 + x
val add = (x: Int) => 1 + x
Run Code Online (Sandbox Code Playgroud)
这两个定义是等价的.