我是scala的新手。我一直在研究java。使用=运算符在scala中定义函数对我来说没有意义。
def abc(a:Int,b:Int):Int =
a+b
任何人都可以解释一下吗?在上面的代码中,为什么我必须使用= operator。
答案 0 :(得分:6)
我相信有很多原因。其中一些:
val abc: Int = 5 //value
def abc: Int = 5 //factory
请注意,此类def abc
可以在后续版本中使用val abc
实现:
trait Interface {
def abc: Int //factory (reader)
}
object Implementation extends Interface {
val abc: Int = 5 //singleton
}
一些高级示例:Why it's impossible to override `var` with `def` in Scala?
2)函数名为lambda's:
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 _"
第一个和第二个之间的句法差异只是括号的位置,所以它们非常相似。
3)该函数实际返回值,您可能会认为a + b
块独立于函数定义,因此:
def abc ...: Int = {
val z = a + b
z
}
几乎就像
val abc: Int = {
val z = a + b
z
}
但a
和b
未知,因此我们也需要对其进行描述:
def abc(a: Int, b: Int): Int = {
val z = a + b
z
}
否则,如果您的方法没有返回任何内容,则可以省略=
符号:
def abc(a: Int, b: Int) {
println(a + b)
}
相当于:
def abc(a: Int, b: Int): Unit = {
println(a + b)
}
其中Unit
(只有一个可能值的居住类型,因此它不包含任何信息)大致意味着没有返回任何值。
答案 1 :(得分:3)
这种方法增强了编程的功能方面,其中函数与其他数据类型没有区别。
e.g。在斯卡拉
val number = 10
val function = (a:Int, b:Int) => a + b
这里,值number
和function
都是不可变的变量。唯一的区别是他们的类型。 number
的类型为Int
,而function
的类型为(Int, Int) => Int
这使得函数可以像数据一样处理,并像其他变量一样传递。这增强了像Higher Order Functions这样的概念,它可以接受和返回函数值而不是文字值。正如@ dk14所提到的那样,它是关于统一访问的。
答案 2 :(得分:1)
我知道为什么scala在方法声明中使用=的原因有:
要从方法定义返回任何值,必须使用=或者即使方法中有return语句也无法返回任何值。
对于Eg:请查看以下两个代码段:
def method1()
{
val a=1
return a
}
def method2()=
{
val a=1
return a
}
method1
返回类型总是单位,即使它返回一些值
而method2
返回值a。