代码之家  ›  专栏  ›  技术社区  ›  Skurmedel

在赋值表达式中找不到显式定义的setter

  •  2
  • Skurmedel  · 技术社区  · 15 年前

    谈到Scala属性,我有一个小难题。

    class Something
    {
        var foo = 1
    }
    

    …可以指定为。。。

    class Something
    {
        private var _field = 1
    
        def foo = _field
        def foo_(foo: Int) = _field = foo
    }
    

    这对我来说非常有意义,当进行赋值时,编译器会查找 name_ 方法。问题是它似乎对我不起作用。

    class Camera
    {
      private var _position = Vector2.zero
    
      def position: Vector2 = _position
      def position_(position: Vector2) =
      {
        // Do boring transforms.
        _position = position // position shadows outer scope so this does work.
      }
    }
    
    // ...
    val camera = new Camera
    camera.position = Vector2(10, 0)
    

    我得到一个错误:

    摄像机位置=矢量(10,0)

    相反,我需要用下面的方式来实现它: camera.position_(Vector2(10, 0))

    在其他场景中,例如,当尝试使用public getter和private setter时,我也面临同样的问题。

    我做错什么了?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Ken Bloom    15 年前

    你的二传手需要被命名 foo_= position_= . 如果你说出他们的名字 foo_ position_ 编译器无法将它们识别为setter。

        2
  •  5
  •   huynhjl bhericher    15 年前

    def position_=(position: Vector2): Unit
    

    所以你想这样更正你的代码:

    def position_=(position: Vector2) { _position = position }