为什么视图绑定和上下文绑定无法检测上下文中存在的隐式
Why view bound and context bound fails to detect implicits present in the context
我是 scala 的新手,我正在尝试实现一种附加两个数字或字符串的方法方法“append
”。
此代码的想法实践来自 this post,其中我指的是 append
方法的示例和用于创建 implicits
的 Appendable
特征].
我尝试使用视图绑定和上下文绑定概念在我的 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
.
我是 scala 的新手,我正在尝试实现一种附加两个数字或字符串的方法方法“append
”。
此代码的想法实践来自 this post,其中我指的是 append
方法的示例和用于创建 implicits
的 Appendable
特征].
我尝试使用视图绑定和上下文绑定概念在我的 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
.