为什么我的scala函数/闭包定义是非法的?

为什么我的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

我正在学习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 { 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
}