用def定义函数

Jos*_*ses 0 scala function

试试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打印的类型上有所不同.我猜第一个定义类似于方法,第二个定义类似于函数值.

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

谢谢您的帮助.

vpt*_*ron 5

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

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)

这两个定义是等价的.