功能定义在Scala中

时间:2017-07-18 06:27:15

标签: scala

任何人都可以解释一下这两种函数定义如何相互区别。它只是一种语法?或者事情比我想的要大......

方法1

def incriment(x:Int):Int  = x+1

方法2

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

3 个答案:

答案 0 :(得分:1)

scala REPL是你的朋友,

第一个,只是一个将int作为输入并且返回int 作为返回类型的方法。

scala> def increment1(x:Int): Int = x + 1
increment1: (x: Int)Int
             |       |
           input     return type

必须为方法提供输入,

scala> increment1
<console>:12: error: missing arguments for method increment1;
follow this method with `_' if you want to treat it as a partially applied function
       increment1

scala> increment1(89)
res3: Int = 90

第二个,一个返回函数的方法,它接受int并返回int

scala> def increment2 = (x:Int) => x + 1
increment2:              Int    =>  Int
                          |          |
                        func input   func return type

//you can pass this function around, 

scala> increment2
res5: Int => Int = <function1>

要调用函数,可以调用apply方法。

scala> increment2.apply(89)
res7: Int = 90

// or you can simply pass parameter within paren, which will invoke `apply`

scala> increment2(89)
res4: Int = 90

也阅读 What is the apply function in Scala?

答案 1 :(得分:1)

在Scala中,如果类型推断很简单,我们可以跳过返回类型。

第一种方法:

def increment(x: Int) : Int = x + 1

这是一个返回Integer的函数(递增整数参数)

但在第二种方法中:

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

这实际上是一个返回另一个函数的函数。 返回的函数可以由客户端调用整数并在响应中获得递增的整数

来调用

答案 2 :(得分:0)

这两个功能完全不同。

重新。 1

def incriment(x: Int) : Int = x + 1

这只是一个返回Int

的函数

重新。 2

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

这个函数返回一个函数,该函数接受Int并返回Int(Int) => Int)。我已经添加了类型注释以使事情变得清晰。 Scala允许您省略它,但有时建议添加它(例如,公共方法等)。