Лучшая практика для реализации черты Scala, которая поддерживает цепочка методов

Я хочу создать черту, которая добавляет некоторое свойство к классу и позволяет связывать методы. Протестировано в Scala 2.8.1.

trait SomeProperty {
    var prop : String = "default"
    def setProp(s: String) = {
        prop = s
        this
    }
}
sealed abstract class Value
case class IntegerValue(v: Int) extends Value
case class FloatValue(v: Float) extends Value with SomeProperty {
    def foo() = { println("I'm foo.") }
}
case object UnknownValue extends Value with SomeProperty {
    def bar() = { println("I'm bar.") }
}

scala> val x = UnknownValue
scala> x.setProp("test").bar()
<console>:10: error: value bar is not a member of SomeProperty
   x.setProp("test").bar()

Какая практика наиболее распространена в подобной ситуации? (Типобезопасный способ предпочтительнее)

10
задан ihji 28 January 2011 в 08:52
поделиться