Quiero hacer un rasgo que agregue alguna propiedad a una clase y permita encadenar métodos. Probado en Scala 2.8.1.Práctica recomendada para implementar el rasgo de Scala que admite el método de encadenamiento
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()
¿Cuál es la práctica más común en este tipo de situación? (Se prefiere modo seguro)
Esto es mejor. – lscoughlin
¡Funciona! Pero no entiendo por qué. Supongo que 'this.type' es igual a' SomeProperty', ¿no es así? ¿Es este Scala específico? ¿O también es posible en Java? – ihji
Este artículo es útil. http://scalada.blogspot.com/2008/02/thistype-for-chaining-method-calls.html – ihji