In Scala how can I advise my own methods?

故事扮演 提交于 2019-12-02 00:33:21

How about separating the presentation logic (render) and the actual contents (value)?

trait Renderable {
  def value : String
  def render = value // default presentation logic, simple rendering.
}

trait Parens extends Renderable {
  override def render :String = "(" + value + ")" // parens rendering.
}

object Foo extends Parens {
  def value = "Hello"
}

println(Foo.render) // prints '(Hello)'

Edit

Found a way you can do pretty much what you wanted, check it out:

trait Renderable {
  def render: String
}

trait Parens extends Renderable {
  abstract override def render = "(" + super.render + ")"
}

class Foo extends Renderable {
  def render = "Hello"
}

val foo = new Foo with Parens
println(foo.render)

You can't use an object since you need to implement the trait at creation time, but if you can control the instance creation then this might work :).

I'm pretty sure it's not possible to do it otherwise (someone please correct me if I'm wrong)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!