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

如何在Scala中定义赋值运算符?

  •  3
  • CyberPlayerOne  · 技术社区  · 7 年前

    例如,我定义了 +* 以下包装器类中的加权和运算符 Double :

      class DoubleOps(val double: Double) {
        def +*(other: DoubleOps, weight: Double): DoubleOps =
          new DoubleOps(this.double + other.double * weight)
      }
    
      object DoubleOps {
        implicit def DoubleToDoubleOps(double: Double) = new DoubleOps(double)
      }
    

    根据此定义,我可以进行以下计算:

    var db: DoubleOps = 1.5
    import DoubleOps._
    db = db +* (2.0, 0.5)
    println(db)
    

    有什么方法可以计算 db 使用赋值运算符获得结果,如定义 +*= ,以便我可以使用:

    db +*= (2.0, 0.5)
    

    这可能吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   sarveshseri    7 年前
    import scala.languageFeature.implicitConversions
    
    class DoubleOps(var double: Double) {
      def +*(other: DoubleOps, weight: Double): DoubleOps =
        new DoubleOps(this.double + other.double * weight)
    
      def +*=(other: DoubleOps, weight: Double): Unit = {
        this.double = this.double + other.double * weight
      }
    }
    
    object DoubleOps {
      implicit def DoubleToDoubleOps(double: Double) = new DoubleOps(double)
    }
    
    val d: DoubleOps = 1.5
    
    d +*= (2.0, 0.5)
    
    推荐文章