1
我試圖通過兩個隱含級別(如here所述)向Symbol
類隱式添加函數。 考慮下面的代碼:隱式轉換符號時隱藏any2stringadd
case class A(s: Symbol)
case class B(s: A) {
def +[X](s: X)(implicit xtoa: X=>A) = B(xtoa(s))
}
implicit def xToB[X](s: X)(implicit xtoa: X => A) = B(xtoa(s))
implicit def symbolToA(s: Symbol) = A(s)
val x = 'a + 'b
這個程序不編譯:
Error: value + is not a member of Symbol
看來這個問題是不是採摘中定義的implicits的剪斷,斯卡拉轉換'a
與any2stringadd
功能。事實上,下面的兩個實驗似乎使代碼編譯:
- 我可以使用不同的功能名稱,而不是
+
(如add
例如) - 我可以明確地在進口陰影
any2stringadd
:import Predef.{any2stringadd => _ , _}
我不喜歡這兩種解決方案。我的問題是,是否有任何其他方式重組我的計劃,以說服斯卡拉選擇我implicits呢?
NB:我使用Scala的2.12.1。有趣的是,的IntelliJ不抱怨這個片段。