代码之家  ›  专栏  ›  技术社区  ›  Alexey Romanov

scala方法结束于_=

  •  7
  • Alexey Romanov  · 技术社区  · 15 年前

    我好像记得斯卡拉的治疗方法 _= 特别是像这样:

    object X { var x: Int = 0; def y_=(n : Int) { x = n }}
    
    X.y = 1
    

    应该打电话 X.y_=(1) . 但是,在2.8.0 RC1中,我收到一条错误消息:

    <console>:6: error: value y is not a member of object X
           X.y = 1
             ^
    

    有趣的是,仅仅尝试调用不带括号的方法也会失败:

    scala> X.y_= 1
    <console>:1: error: ';' expected but integer literal found.
           X.y_= 1
                 ^
    

    我是不是记错了一些真正存在的东西,还是仅仅是用整件衣服创造出来的?

    2 回复  |  直到 15 年前
        1
  •  13
  •   missingfaktor Kevin Wright    15 年前

    这是scala中的一个角落案例。没有getter就不能有setter 反之亦然 .

    以下工作正常:

    scala> object X {
         |   var x: Int = 0
         |   def y = x
         |   def y_=(n: Int) { x = n }
         | }
    defined module X
    
    scala> X.y = 45
    
    scala> X.y
    res0: Int = 45
    
        2
  •  3
  •   Eastsun    15 年前
    scala> object X { var x: Int = 0; def y_=(n : Int) { x = n }}
    defined module X
    
    scala>
    
    scala> X y_= 1
    
    scala> X.x
    res1: Int = 1
    
    scala> object X { var x: Int = _; def y = x ; def y_=(n: Int) { x = n } }
    defined module X
    
    scala> X.y = 1
    
    scala> X.y
    res2: Int = 1
    
    scala>
    
    推荐文章