首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法控制默认使用哪种隐式转换?

有没有办法控制默认使用哪种隐式转换?
EN

Stack Overflow用户
提问于 2009-12-11 17:48:21
回答 1查看 5K关注 0票数 20

假设我有这样的结果:

代码语言:javascript
复制
class String2(val x:String) {
    def *(times:Int) : String = {
        val builder = new StringBuilder()
        for( i <- 0 until times) {
            builder.append(x)
        }
        builder.toString()
    }
}

现在如果我添加这个隐式的:

代码语言:javascript
复制
implicit def gimmeString2(y:String) = new String2(y)

我会得到一个编译错误,因为stringWrapper也添加了这个隐式代码。有没有一种方法可以告诉编译器“忽略其他隐式,使用这个”,这样我就不必实例化String2对象并对其进行处理?

我承认示例代码可能不是最合适的(对于这个问题),但我认为它可以。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-11 20:12:23

Scala 2.8为隐含添加了优先级系统。它在此SIP on the new Java arrays中进行了解释

当比较重载方法或隐式方法的两种不同的适用替代方法时,每个方法都会因为具有更具体的参数而得到一分,而在适当的子类中定义则会得到另一分。如果一个替代方案在这两个比较中获得了更多的分数,那么它将“胜出”另一个替代方案。

结论是,如果备选方案具有相同的参数类型,则在子类中定义的参数类型将获胜。因此,我相信您可以像下面这样声明隐式:

代码语言:javascript
复制
trait LowPriorityImplicits {
  //lower priority conversions
}

object HighPriorityImplicits extends LowPriorityImplicits {
  //higher-order ones here
}
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1886953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档