在Scala中为什么我们在定义方法时需要"="?

vik*_*ant 3 functional-programming scala function

以下是我们如何定义函数是scala

def printName() : Any = { println ("vikrant") } 
def printName() : Unit = { println ("vikrant") } 
Run Code Online (Sandbox Code Playgroud)

"="只是一种语法还是有目的?问这个是因为当我没有提到返回类型时我被允许跳过这个,如下所示

def printName() { println ("vikrant") }     
Run Code Online (Sandbox Code Playgroud)

Ben*_*ich 6

如果一个方法返回Unit,你可以省略=(称为过程语法),但是强烈建议不要这样做(它已被弃用,甚至还有讨论要删除它).从文档中的样式指南:

应根据以下模式声明方法:

def foo(bar: Baz): Bin = expr
Run Code Online (Sandbox Code Playgroud)

过程语法:避免使用过程语法,因为它的简洁性几乎不会引起混淆.

// don't do this
def printBar(bar: Baz) {
  println(bar)
}
// write this instead
def printBar(bar: Bar): Unit = {
  println(bar)
} 
Run Code Online (Sandbox Code Playgroud)

生成的字节代码没有区别.这只是语法糖.请参阅Scala规范的 4.6.3节,其中说:

过程存在特殊语法,即返回Unit值的函数 ().过程声明是一个函数声明,其中省略了结果类型.然后隐式地将结果类型完成到 Unit类型.

所以它编译成相同的代码.如果您使用以下-Xfuture选项,此功能会发出警告:

警告:不建议使用过程语法.foo通过添加将过程转换为方法: Unit =.

在Scala中,每个方法都返回一个值(与其他语言不同,这些语法具有void不返回任何内容的方法).方法是void在其他语言中经常回UnitScala中(如您的printName例子).

您可以将任何方法声明为返回Unit,无论后面的表达式的值如何=.这是一种称为价值丢弃的语言功能,在此处进行了详细说明.