我正在学习Scala作为个人兴趣而且我对以下的返回值感到困惑,其中我希望最终打印52:
def lexicalTest(a: Int) = {
(b: Int) => {
(c: Int) => {
a + b + c
}
}
}
val step01 = lexicalTest(10)
val step02 = step01(10)
def plusThirty(a: Int, b: Int) {
a + b
}
println(plusThirty(22, step02(10)))
如果step02(10)肯定返回30,并且它是Int类型,那么为什么我的返回等于()
FWIW:我的观点是让这种事情在JavaScript中运行。
更新:感谢Cookie怪物,def plusThirty(a: Int, b: Int) {
应该阅读def plusThirty(a: Int, b: Int) = {
答案 0 :(得分:4)
在scala中,如果您在function
下方声明,请按reference中的§4.6进行操作:
def f(n:Somthing) = {}
然后返回类型f
除非手动指定,否则从块返回的返回类型中获取(由于类型推断)。
根据§4.6.3,以下是procedure
def f(n:Somthing) {}
f
的返回类型为Unit
,即使它显示为Int
。事实上,如果您手动使用return
而不是隐式return
,则在repl中它会给出:
scala> def plusThirty(a: Int, b: Int) {
| return a + b
| }
<console>:8: warning: enclosing method plusThirty has result type Unit: return value discarded
return a + b
^
plusThirty: (a: Int, b: Int)Unit
scala> plusThirty(22, step02(10))
正如评论中所说,它应该低于其他程度:
def plusThirty(a: Int, b: Int) = {
a + b
}