Voglio creare un tratto che aggiunge alcune proprietà a una classe e consente di concatenare i metodi. Testato in Scala 2.8.1.Best practice per implementare il tratto Scala che supporta il metodo di concatenamento
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()
Qual è la pratica più comune in questo tipo di situazione? (Si preferisce la modalità sicura)
Questo è meglio. – lscoughlin
Funziona! Ma non capisco perché. Immagino che 'this.type' sia uguale a' SomeProperty', no? Scala specifica? O anche possibile in Java? – ihji
Questo articolo è utile. http://scalada.blogspot.com/2008/02/thistype-for-chaining-method-calls.html – ihji