ihj*_*hji 10 scala traits method-chaining
我想创建一个特性,为类添加一些属性,并使链式方法成为可能.在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()
Run Code Online (Sandbox Code Playgroud)
在这种情况下最常见的做法是什么?(首选类型安全方式)
小智 20
您可以显式指定实例类型作为setProp的返回类型.
trait SomeProperty {
var prop : String = "default"
def setProp(s: String):this.type = {
prop = s
this
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3827 次 |
| 最近记录: |