Scala:具有相同名称的多个隐式转换
发布时间:2020-12-16 09:49:35 所属栏目:安全 来源:网络整理
导读:使用 scala 2.10.3,我的目标是做以下工作: object A { implicit class Imp(i: Int) { def myPrint() { println(i) } }}object B { implicit class Imp(i: String) { def myPrint() { println(i) } }}import A._import B._object MyApp extends App { 3.myPr
使用
scala 2.10.3,我的目标是做以下工作:
object A { implicit class Imp(i: Int) { def myPrint() { println(i) } } } object B { implicit class Imp(i: String) { def myPrint() { println(i) } } } import A._ import B._ object MyApp extends App { 3.myPrint() } 这失败了 value myPrint is not a member of Int 如果我给A.Imp和B.Imp赋予不同的名称(例如A.Imp1和B.Imp2),它就可以了. 更深入地潜入它,隐式转换似乎存在同样的问题. 这有效: object A { implicit def Imp(i: Int) = new { def myPrint() { println(i) } } implicit def Imp(i: String) = new { def myPrint() { println(i) } } } import A._ object MyApp extends App { 3.myPrint() } 然而,这不是: object A { implicit def Imp(i: Int) = new { def myPrint() { println(i) } } } object B { implicit def Imp(i: String) = new { def myPrint() { println(i) } } } import A._ import B._ object MyApp extends App { 3.myPrint() } 为什么?这是scala编译器中的错误吗?我需要这种情况,因为我的对象A和B派生自相同的特征(带有类型参数),然后定义其类型参数的隐式转换.在这个特性中,我只能为隐式转换指定一个名称.我希望能够将更多这些对象导入我的范围.有没有办法做到这一点? 编辑:我不能给隐式类赋予不同的名称,因为上面的例子只是解决问题.我的实际代码看起来更像 trait P[T] { implicit class Imp(i: T) { def myPrint() { ... } } } object A extends P[Int] object B extends P[String] import A._ import B._ 解决方法
隐含必须以简单名称提供,因此您可以在导入时重命名.
只是为了验证: scala> import A._ ; import B.{ Imp => BImp,_ } import A._ import B.{Imp=>BImp,_} scala> 3.myPrint 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |