Javascript Scala返回值不是预期值

Javascript Scala返回值不是预期值,javascript,scala,functional-programming,closures,Javascript,Scala,Functional Programming,Closures,我学习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

我学习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 monster,
def plusThirty(a:Int,b:Int){
应为
def plusThirty(a:Int,b:Int)={
在scala中,根据§4.6,如果您在下面声明
函数

def f(n:Somthing) = {}
然后从块返回的返回类型中获取
f
的返回类型,除非手动指定(由于类型推断)

根据§4.6.3,以下为
程序

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))

在scala中,根据§4.6,如果您在下面声明
功能

def f(n:Somthing) = {}
然后从块返回的返回类型中获取
f
的返回类型,除非手动指定(由于类型推断)

根据§4.6.3,以下为
程序

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))

我对Scala一无所知,但我注意到您的
plusThirty
函数的第一行中没有
=
。我在一个在线Scala计算器中尝试了它,并修复了它。
def plusThirty(a:Int,b:Int)={
Ahh!非常感谢。总是在背后捅我们自己=)这是可行的,原因是没有
=
的函数被定义为返回
单元的函数,所以表达式的结果不会返回。请注意您的代码(一旦通过引入缺少的
=
修复):您使用的每一个花括号都是不必要的!我对Scala一无所知,但我注意到您的
plusThirty
函数的第一行中没有
=
。我在一个在线Scala计算器中试用了它,并修复了它。
def plusThirty(a:Int,b:Int)={
Ahh!非常感谢。总是在背后捅我们自己=)这是可行的,原因是没有
=
的函数被定义为返回
单元的函数,所以表达式的结果不会返回。请注意您的代码(一旦通过引入缺少的
=
修复):您使用的每个大括号都是不必要的!这就是为什么在Scala的未来版本中将删除过程定义语法的原因。Martin Odersky自己现在认为“同等自由”显式注释返回类型<代码>单位的简写是一个错误,建议不要这样做。我同意,我的组织现在要求在我们的代码中使用长格式。这就是为什么在Scala的未来版本中将删除过程定义语法。Martin Odersky自己现在认为“同等自由”明确注释返回类型<代码>单位的速记是一个错误,建议不要这样做。我同意,我的组织现在要求在我们的代码中使用长格式。