Scala"def"方法声明:冒号vs等于

Mar*_*ins 5 methods scala function scalastyle

我正处于学习Scala的早期阶段,我注意到了声明方法的不同方法.

我已经确定不使用等号使方法成为一个void方法(返回一个Unit而不是一个值),并使用等号返回实际值,所以

def product(x: Int, y: Int) {
  x*y
}
Run Code Online (Sandbox Code Playgroud)

将返回()(单位),但是

def product(x: Int, y: Int) = {
  x*y
}
Run Code Online (Sandbox Code Playgroud)

将返回两个参数的乘积(x*y)

我注意到了第三种声明方法 - 用冒号.这是一个例子

def isEqual(x: Any): Boolean
Run Code Online (Sandbox Code Playgroud)

这与=符号有何不同?在什么情况下最好用这种方式?

Ser*_*tin 11

当您使用冒号(并使用相等)时,您显式定义方法的返回类型.

// method return Boolean value
def m(a : Int) : Boolean = a > 0 
Run Code Online (Sandbox Code Playgroud)

当你不使用冒号并使用相等时,你允许scala编译器推断返回类型本身.

// method has return type of last expression (Boolean)
def m(a : Int) = a > 0 
Run Code Online (Sandbox Code Playgroud)

当你既不使用冒号也不等于你的方法时返回Unit类的类型.

// method has Unit return type
def m(a : Int){ 
    a > 0 
}
Run Code Online (Sandbox Code Playgroud)