【问题标题】:How to refer to "this" in an implicit method如何在隐式方法中引用“this”
【发布时间】:2020-04-09 17:36:24
【问题描述】:

给定一个案例类和伴随对象,如下所示:

case class Example(a: String)

object Example {
  implicit def concat(b: String): Example =
    Example(this.a + b)
}

如何使隐式方法编译?换句话说,是否可以引用已调用隐式方法的当前实例?

【问题讨论】:

  • concat 不能在 Example 的实例上调用。因此,this 范围内没有可引用的实例。
  • 已经有类似的问题问了:stackoverflow.com/questions/36528736/…
  • @amer,很相似,但不能完全回答我的问题。

标签: scala implicit


【解决方案1】:

我认为您想要的是以下内容:

object Foo {
  implicit class RichExample(val e: Example) {
    def concat(b: String): Example = Example(e.a + b)
  }
}

或使用匿名隐式类

object Foo {
  implicit def richExample(e: Example) = new {
    def concat(b: String): Example = Example(e.a + b)
  }
}

用法

你可以这样使用它

import Foo._

Example("foo").concat("bar")

导入和伴随对象

如果对象被称为Example,那么它将成为类Example的伴生对象,您不必import Foo._使用扩展方法。

【讨论】:

  • 我怎么称呼它呢?编译器不允许我这样做Example("a").concat("b")
  • 好的,应该像case类一样调用外层单例,然后就可以了。谢谢! :)
  • 或添加import Foo.RichExample
  • @AlexeyRomanov,是的,但是代码变得有点混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多