相关疑难解决方法(0)

磁铁模式和重载方法

对于非重载和重载方法,Scala如何解析"Magnet Pattern"的隐式转换有很大差异.

假设存在如下实现的特征Apply("磁体模式"的变体).

trait Apply[A] {
 def apply(): A
}
object Apply {
  implicit def fromLazyVal[A](v: => A): Apply[A] = new Apply[A] {
    def apply(): A = v
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我们创建一个Foo具有单个apply实例的特征,Apply因此我们可以将任意类型的值传递给它,A因为存在隐式转换A => Apply[A].

trait Foo[A] {
  def apply(a: Apply[A]): A = a()
}
Run Code Online (Sandbox Code Playgroud)

我们可以确保它使用REPL按预期工作,并使用此解决方法来减少Scala代码.

scala> val foo = new Foo[String]{}
foo: Foo[String] = $anon$1@3a248e6a

scala> showCode(reify { foo { "foo" } }.tree)
res9: String =    
$line21$read.foo.apply( …
Run Code Online (Sandbox Code Playgroud)

scala implicit

18
推荐指数
1
解决办法
1458
查看次数

标签 统计

implicit ×1

scala ×1