【问题标题】:Why my scala function/closure definition is illegal? [closed]为什么我的 scala 函数/闭包定义是非法的? [关闭]
【发布时间】:2020-11-18 20:02:35
【问题描述】:

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

【问题讨论】:

    标签: scala functional-programming closures


    【解决方案1】:

    错误信息非常清楚,与大多数其他定义不同,您只是在函数主体前缺少了一个等号。

    例如

    def f11(a:Int, b:Int):Int { return a+b; }       
    

    应该变成

    def f11(a:Int, b:Int):Int = { return a+b; }       
    

    此外,在 Scala 中,闭包的值自动是最新计算的,return 可能不会像您认为的那样做。所以正确的定义应该是

    def f11(a:Int, b:Int):Int = {
      a+b
    }       
    

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2012-12-14
      相关资源
      最近更新 更多