Javascript Scala返回值不是预期值
我学习Scala是出于个人兴趣,我对以下内容的返回值感到困惑,我希望最终打印出52页: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
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自己现在认为“同等自由”明确注释返回类型<代码>单位代码>的速记是一个错误,建议不要这样做。我同意,我的组织现在要求在我们的代码中使用长格式。