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

2024-02-14

假设我有这个:

class String2(val x:String) {
    def *(times:Int) : String = {
        val builder = new StringBuilder()
        for( i <- 0 until times) {
            builder.append(x)
        }
        builder.toString()
    }
}

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

implicit def gimmeString2(y:String) = new String2(y)

我会得到一个编译错误,因为 stringWrapper 也添加了这个隐式。有没有办法对编译器说“忽略其他隐式,使用这个”,这样我就不必实例化String2对象并为此努力?

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


Scala 2.8 添加了隐式优先级系统。这里面有解释新 Java 阵列上的 SIP http://www.scala-lang.org/sites/default/files/sids/cunei/Thu,%202009-10-01,%2013:54/arrays.pdf:

当比较重载方法或隐式方法的两种不同的适用替代方法时,每个方法因具有更具体的参数而获得一分,并因在正确的子类中定义而获得另一分。如果一个替代方案在这两次比较中获得更多分数,则该替代方案“胜过”另一个方案

结论是如果替代项具有相同的参数类型,则为子类中定义的参数类型 获胜。因此我相信您可以按如下方式声明隐式:

trait LowPriorityImplicits {
  //lower priority conversions
}

object HighPriorityImplicits extends LowPriorityImplicits {
  //higher-order ones here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法控制默认使用哪个隐式转换? 的相关文章

随机推荐

  • MVVM 命令绑定

    我正在尝试学习 MVVM 模式 我遇到的主要问题是学习应该在哪里声明 创建和绑定命令对象 2个例子 我有一个主窗体 其作用类似于交换机或主菜单 选择按钮 1 并显示视图 1 选择按钮 2 并显示视图 2 伟大的 现在我想返回主窗体 因此我需
  • 错误:React Native expo-video-thumbnails IOS 中无法写入文件错误

    我正在从视频 URL 生成缩略图 它在 Android 中工作正常 但在 IOS 中出现错误 Error Can t write to file 下面是我的代码 import as VideoThumbnails from expo vid
  • Node JS 智利现行 DST 规则

    根据规范 Node JS ES5 在处理 Date 对象时应使用当前的 dts 规则 当前的意思是 现在 而不是特定的日期 这并不完美 但目前对我来说已经足够了 目前 该规则是错误的 由于智利法律的变化 简单探针 console log n
  • 如何使用 scala 将 postgreSQL 数据库连接到 Apache Spark?

    我想知道如何在 scala 中执行以下操作 使用 Spark scala 连接到 postgreSQL 数据库 编写 SQL 查询 如 SELECT UPDATE 等 来修改表 那个数据库 我知道使用 scala 来做到这一点 但是如何在打
  • 使用 JavaScript 获取 iPhone X 安全区域

    We have safe area inset left safe area inset right safe area inset top and safe area inset bottom在 CSS 中 但是我们如何使用 JavaSc
  • 使用 typescript 将消息发送到特定通道

    每当新用户加入服务器 公会 时 我想向 欢迎 文本通道发送一条问候消息 我面临的问题是 当我找到想要的频道时 我将收到类型为GuildChannel Since GuildChannel has no send 功能 我无法发送消息 但我找
  • 使用 Python、NumPy、SciPy 进行矩阵乘法的高效矩阵切片

    我想重塑 2dscipy sparse csr csr matrix 我们称其为A 到 2dnumpy ndarray 让我们称之为B A可能 gt shape A 90 10 then B应该 gt shape B 9 10 其中每 10
  • 调用带有标头的 Volley 请求时出现 UnsupportedOperationException

    我尝试向 Volley 库发出呼叫请求 我想设置标头 但收到 java lang UnsupportedOperationException 你知道为什么吗 我该如何解决这个问题 public void getAccountInfo Req
  • 从 1000 增加限制?

    当我像这样进行搜索时 my mesg ldap gt search base gt OU test DC example DC com scope gt one filter gt objectClass organizationalPer
  • Hive 中特定列的区别

    我正在运行 Hive 071 我有一个表 有多行 具有相同的列值 x y 1 2 1 3 1 4 2 2 3 2 3 1 我想让 x 列唯一 并删除具有相同 x 值的行 x y 1 2 2 2 3 2 or x y 1 4 2 2 3 1
  • 未安装 google+ 时应用程序强制关闭

    我的要求是在社交网站上分享 所以 我已经完成了 Facebook 和 Twitter 的工作 但我被困住了Google 我有以下代码可以分享Google 但是应用程序forcecloses当我开始活动时 仅当以下情况时才会发生这种情况Goo
  • 当我的应用程序在野外崩溃时,如何提高调试数据的质量?

    我的应用程序中出现了第一个 NullPointerExceptions 它显示在开发人员控制台上 当我开始在这里寻求建议时 我意识到问题是什么 但它让我想起了一些困扰我一段时间的事情 当唯一的事情时 如何尽可能轻松地调试我的代码我可以访问开
  • 删除数据框中与另一个不共同的列 (R)

    我有两个长度不同的数据帧 一个是样品 另一个是测试样品 df1 a b c d 1 0 0 0 2 0 0 1 df2 a e b c d 1 1 0 0 0 2 0 0 0 1 如何删除 df2 与 df1 不共同的列 因此 我正在寻找与
  • 计算贝塞尔样条曲线以从一个点到另一个点

    我在 X Y 旋转中有 2 个点 我需要计算平滑连接这两个点的贝塞尔样条线 二次贝塞尔曲线的集合 见图 点代表游戏中只能缓慢旋转的单位 所以从A点到B点 必须走很长的路 附图显示了一条相当夸张的弯曲路径 但你明白了 我可以使用什么公式来计算
  • ">"(大于号)CSS 选择器是什么意思?

    例如 div gt p some class Some declarations 具体是做什么的 gt 标志是什么意思 gt is the child combinator https www w3 org TR selectors chi
  • Django 跨越关系

    我已阅读文档 但仍然出现错误 我有用户为目录对象下订单 我想创建一个查询 返回具有包含特定目录项的订单的所有用户 这是我的模型 class Catalog models Model name models CharField max len
  • 如何在没有 WordPress 插件的情况下添加多个特色图像上传按钮

    如何在不使用 WordPress 插件的情况下添加第二个特色图像上传按钮 你需要添加多后缩略图 admin js您还需要添加相同的过滤器以了解详细信息请参阅下面的链接 http lifeonlars com wordpress how to
  • 如何使用 Python 访问 Windows Vista 上的文件属性?

    问题就像标题一样简单 如何使用 Python 访问 Windows 文件属性 例如日期修改 更具体地说是标签 对于我正在执行的程序 我需要获取特定文件夹中各种文件的所有标签的列表 但我不确定如何执行此操作 我有 win32 模块 但我没有看
  • 如何通过单击按钮来调用 datagridview 事件?

    我想知道如何在 C 中调用事件 实际上 我有一个 datagridview 双击事件 它使用 datagridview 中选定行的值填充 f2 的文本框 并在分配的文本框中显示 form2 和这些值 现在我想通过单击一个按钮来做到这一点 比
  • 有没有办法控制默认使用哪个隐式转换?

    假设我有这个 class String2 val x String def times Int String val builder new StringBuilder for i lt 0 until times builder appe