0

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

对这段代码进行实践的想法来自这篇append文章,我在其中提到了一个Appendable用于创建implicits.

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

任何人都可以建议以下代码中缺少的内容吗?为什么它失败了?我也尝试在这里复制相同的内容。

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)
}
4

1 回答 1

3
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

于 2021-08-13T11:59:52.120 回答