为什么视图绑定和上下文绑定无法检测上下文中存在的隐式

Why view bound and context bound fails to detect implicits present in the context

我是 scala 的新手,我正在尝试实现一种附加两个数字或字符串的方法方法“append”。

此代码的想法实践来自 this post,其中我指的是 append 方法的示例和用于创建 implicitsAppendable 特征].

我尝试使用视图绑定和上下文绑定概念在我的 IntelliJ 中复制相同的代码,但不知何故它不起作用。

任何人都可以提出以下代码中缺少的内容吗?为什么它失败了? 我也尝试复制相同的 here.

trait Appendable[A]{
  def append(a: A, b : A) : A
}

object Appendable {
  implicit val appendableString = new Appendable[String] {
    override def append(a: String, b : String): String = a + b
  }

  implicit val appendableInt = new Appendable[Int] {
    override def append(a: Int, b : Int): Int = a + b
  }
}

object ItemAppenderTester extends Object {
  def appendItem[A <% Appendable[A]]( a : A, b : A) = a append b
  def appendItem2[A : Appendable[A]]( a : A, b : A) = implicitly[Appendable[A]].append(a,b)

  def appendItem3(a : A, b : A) (implicit  ev : Appendable[A]) = ev.append(a,b)
  appendItem(1,2)
}
def appendItem[A <% Appendable[A]]( a : A, b : A)

现在错了。 X <% Y 表示 (implicit ev: X => Y)。您没有定义隐式 A => Appendable[A](与 Medium 上的文章相反,请参阅那里的 toAppendable)。 <% 也已弃用。

appendItem2可以固定:

def appendItem2[A : Appendable]( a : A, b : A)

appendItem3可以修复:

def appendItem3[A](a : A, b : A) (implicit  ev : Appendable[A])

其实appendItem2被脱糖成了appendItem3.