我是斯卡拉的新手.我一直在研究java.使用=运算符在scala中定义函数对我来说没有意义.
def abc(a:Int,b:Int):Int =
a+b
Run Code Online (Sandbox Code Playgroud)
谁能解释一下?在上面的代码中,为什么我必须使用=运算符.
我相信有很多原因.其中一些:
1)统一访问:
val abc: Int = 5 //value
def abc: Int = 5 //factory
Run Code Online (Sandbox Code Playgroud)
请注意,这def abc可以通过val abc内部后继实现:
trait Interface {
def abc: Int //factory (reader)
}
object Implementation extends Interface {
val abc: Int = 5 //singleton
}
Run Code Online (Sandbox Code Playgroud)
一些高级示例:为什么在Scala中用`def`覆盖`var`是不可能的?
2)函数名为lambda:
val abc = (a: Int, b: Int) => a + b //lambda assigned to abc value
def abc (a:Int, b:Int): Int = a + b //abc method, that could be converted to lambda/function with eta-expansion: "abc _"
Run Code Online (Sandbox Code Playgroud)
第一个和第二个之间的句法差异只是括号的位置,所以它们非常相似.
3)该函数实际返回值,您可能会认为该a + b块独立于函数定义,因此:
def abc ...: Int = {
val z = a + b
z
}
Run Code Online (Sandbox Code Playgroud)
几乎就像
val abc: Int = {
val z = a + b
z
}
Run Code Online (Sandbox Code Playgroud)
但是a并且b未知,所以我们也需要描述它们:
def abc(a: Int, b: Int): Int = {
val z = a + b
z
}
Run Code Online (Sandbox Code Playgroud)
否则,如果您的方法没有返回任何内容,则可以省略=sign:
def abc(a: Int, b: Int) {
println(a + b)
}
Run Code Online (Sandbox Code Playgroud)
这相当于:
def abc(a: Int, b: Int): Unit = {
println(a + b)
}
Run Code Online (Sandbox Code Playgroud)
其中Unit(只有一个可能值的居住类型,因此它不包含任何信息)粗略意味着没有返回任何值.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |