2012-11-06 96 views
1

我想在scala中定义一个(或两个,取决于你如何看待它)运算符。在构造函数中插入opertors来设置字段

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

我写了一个小例子,使用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) 
    } 
} 

回答

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" 
} 
+0

是的!看起来像这将适用于我的情况:)谢谢! – schlicht

相关问题