构造函数中的中缀运算符设置字段

时间:2012-11-06 13:46:23

标签: scala implicit-conversion infix-operator

我想在scala中定义一个(或两个,取决于你如何看待它)运算符。

像这样:_ ==> _ | _下划线代表参数。 棘手的部分是,应该在构造函数中使用运算符来设置对象的字段。

我写了一个小例子,使用了implicits和一个包装器对象。但这种方法显然不起作用。 我不知道,我如何设置当前对象的字段。

在此示例中,类型B中的每个创建对象都应将其字段设置为“B”,44和“foo”。结果“B”==> 44 | “foo”应与this.a =“B”相同; this.b = 44; this.c = foo。 有没有办法实现这个目标?

谢谢!

abstract class Top {

  var a = "a"
  var b = 3
  var c = "c"
  implicit def js2WJ(js: String) : Wrapper = {
    new Wrapper(js)
  }

}

case class B() extends Top
{
    "B" ==> 44 | "foo"
}

class Wrapper(js: String)
{
    var ju : Option[Int] = None 
    var cs : Option[String] = None
    def ==>(j: Int): Wrapper = {
      ju = Some(j)
      this
    }
    def | (cs: String) =
    {
      this.cs = Some(cs) 
    }
}

1 个答案:

答案 0 :(得分:2)

这是你需要的吗?

abstract class Top {
  var a = "a"
  var b = 3
  var c = "c"
  implicit def js2WJ(js: String): TopBuilder = TopBuilder(js, b, c, this)
}

case class TopBuilder(a: String, b: Int, c: String, top: Top) {
    def ==> (j: Int) = copy(b = j)
    def | (s: String) = copy(c = s) toTop
    def toTop {
        top.a = a
        top.b = b
        top.c = c
    }
}


object B extends Top {
    "B" ==> 44 | "foo"
}