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)
如果一个方法返回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,无论后面的表达式的值如何=.这是一种称为价值丢弃的语言功能,在此处进行了详细说明.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |