以下是我们如何定义函数是scala
def printName() : Any = { println ("vikrant") }
def printName() : Unit = { println ("vikrant") }
" ="只是一个语法或它有一个目的?问这个是因为我没有提到返回类型时允许跳过这个,如下面的
def printName() { println ("vikrant") }
答案 0 :(得分:6)
如果方法返回Unit
,则可以省略=
(称为过程语法),但强烈建议不要这样做(它已被弃用,甚至有与remove it进行了讨论。来自the style guide in the docs:
应根据以下模式声明方法:
def foo(bar: Baz): Bin = expr
过程语法:避免使用过程语法,因为在简洁方面获得的收益往往会令人困惑。
// don't do this
def printBar(bar: Baz) {
println(bar)
}
// write this instead
def printBar(bar: Bar): Unit = {
println(bar)
}
生成的字节代码没有区别。它只是语法糖。请参阅the Scala specification的第4.6.3节,其中包含:
程序存在特殊语法,即返回的函数
Unit
值()
。过程声明是一个函数声明,其中省略了结果类型。 然后隐式地完成结果类型Unit
类型。
所以它编译成相同的代码。如果您使用-Xfuture
选项:
警告:不推荐使用过程语法。通过添加
foo
将方法: Unit =
转换为方法。
在Scala中,每个方法都返回一个值(与方法为void
并且不返回任何内容的其他语言不同)。其他语言中void
的方法通常会在Scala中返回Unit
(例如您的printName
示例)。
您可以将任何方法声明为返回Unit
,无论=
之后的表达式的值如何。这是一种称为值丢弃的语言功能,解释更多here。
答案 1 :(得分:-2)
可能适合功能风格。 Scala似乎在可能的情况下倾向于功能,并且花括号用于创建命令性块,这可以避开功能。它与Haskell等语言的语法类似,通常用于定义函数而不是过程。
它可以编写的许多方法是混合两种截然不同的范例的结果。