为什么我的scala函数/闭包定义是非法的?
我正在学习scala编程语言 这里有一些简单的函数和带有bug的闭包,请帮助我修复它们,为什么我的scala函数/闭包定义是非法的?,scala,functional-programming,closures,Scala,Functional Programming,Closures,我正在学习scala编程语言 这里有一些简单的函数和带有bug的闭包,请帮助我修复它们,Rational.scala: // function def f11(a:Int, b:Int):Int { return a+b; } def f12(a:Int, b:Int):Int = a+b def f21(a:(Int)=>Int, b:Int):Int { ret
Rational.scala
:
// function
def f11(a:Int, b:Int):Int { return a+b; }
def f12(a:Int, b:Int):Int = a+b
def f21(a:(Int)=>Int, b:Int):Int { return a(b); }
def f22(a:(Int)=>Int, b:Int):Int = a(b)
def f31(a:Int, b:Int):(Int)=>Int { return (c:Int) => a + b + c; }
def f32(a:Int, b:Int):(Int)=>Int = (c:Int) => a + b + c
// closure
val g11 = (a:Int, b:Int) => a + b;
val g12:(Int,Int)=>Int = (a:Int, b:Int) => { return a + b; }
val g21 = (a:(Int)=>Int, b:Int) => a(b);
val g22:((Int)=>Int,Int)=>Int = (a:(Int)=>Int, b:Int) => { return a(b); }
val g31 = (a:Int, b:Int) => (c:Int) = a+b+c;
val g32:(Int,Int)=>(Int)=>Int = (a:Int, b:Int) => { return (c:Int) => a+b+c; }
使用scala Rational运行它们。scala,会显示错误消息:
Rational.scala:32: error: illegal start of declaration (possible cause: missing `=` in front of current method body)
def f11(a:Int, b:Int):Int { return a+b; } // (Int,Int)->Int
^
Rational.scala:36: error: illegal start of declaration (possible cause: missing `=` in front of current method body)
def f21(a:(Int)=>Int, b:Int):Int { return a(b); } // ((Int)->Int,Int)->Int
^
Rational.scala:40: error: illegal start of declaration (possible cause: missing `=` in front of current method body)
def f31(a:Int, b:Int):(Int)=>Int { return (c:Int) => a + b + c; } // (Int,Int)->(Int)->Int
^
Rational.scala:54: error: ';' expected but '=' found.
val g31 = (a:Int, b:Int) => (c:Int) = a+b+c;
错误信息非常清楚,与大多数其他定义不同,您只是在函数体前面缺少了一个equal 例如 应该成为
def f11(a:Int, b:Int):Int = { return a+b; }
此外,在Scala中,闭包的值是自动计算的最新值,return
可能不会执行您认为它会执行的操作。因此,正确的定义应该是
def f11(a:Int, b:Int):Int = {
a+b
}
def f11(a:Int, b:Int):Int = {
a+b
}