代码之家  ›  专栏  ›  技术社区  ›  Jackson Davis

+=/*=/etc scala中任意值类型(int、double等)上的运算符

  •  3
  • Jackson Davis  · 技术社区  · 16 年前

    为anyval的子类声明的*=/+=/etc方法具体在哪里?我假设为这些类型做了一些特殊的事情,因为作为一个val,那些是无效的,但是作为一个var,它们是可以的。这只是更多的合成糖吗?我想是转弯了

    a *= 5
    

    进入之内

    a = a * 5
    

    这显然对VAL来说是失败的。这种直觉是正确的吗?我还假设它只对任何人尝试这个?

    谢谢)

    2 回复  |  直到 14 年前
        1
  •  9
  •   Daniel C. Sobral    14 年前

    你的直觉是正确的。为了 任何 类,不仅是 AnyVal ,如果不存在赋值方法,则 a OP= b 变成 a = a OP b . 请注意, OP 在这种情况下,必须是非字母数字字符。

    这在 Scala Reference (scala规范),第6.12.4节。

        2
  •  0
  •   user unknown    14 年前

    一个简短的foo游戏:

    class Foo (val v: String, val n: String) {
      override def toString : String = v + " : " + n
      def #: (i: Int) : Foo = {
        new Foo (v.substring (i), n.substring (i)) }}
    
    var foo = new Foo ("Martin", "Odersky") 
    
    scala> foo #:= 2
    scala> foo
    res30: Foo = rtin : ersky
    
    scala> foo #:= 2
    scala> foo      
    res32: Foo = in : sky
    
    scala> foo #:= 2
    scala> foo      
    res34: Foo =  : y
    
    推荐文章