Scala 隐式转换范围问题

2024-06-01

采取这个代码:

  class Register(var value:Int = 0) {
      def getZeroFlag() : Boolean = (value & 0x80) != 0
  }

  object Register {
      implicit def reg2int(r:Register):Int = r.value
      implicit def bool2int(b:Boolean):Int = if (b) 1 else 0
  }

我想像这样使用它:

val x = register.getZeroFlag + 10

但我受到的欢迎是:

type mismatch; found : Boolean required: Int

发生什么?我是否需要定义一个隐式获取返回布尔值的函数?


这是一个演示如何使用隐式的示例:

object Test {
  val register = new Register(42)
  val x = 1 + register // implicitly calling reg2int from companion object
  val y = register - 1 // same
  // val z = register + 1 // doesn't work because "+" means string concatenation

  // need to bring bool2int implicit into scope before it can be used
  import Register._
  val w = register.getZeroFlag() + 2 // this works now
  val z2 = register + 1 // works because in-scope implicits have higher priority 
}

这里有两个可能不明显的事情:

  • 当寻求与类型对象之间的隐式转换时Register,编译器将查找伴生对象Register。这就是为什么我们不需要带reg2int明确地纳入定义范围x and y。然而,转换bool2int确实需要在范围内,因为它没有定义Boolean or Int伴生对象。
  • 方法+已在所有对象上定义为通过隐式进行字符串连接any2stringadd in scala.Predef。定义val z是非法的,因为隐式的字符串连接优先于reg2int(在伴生对象中发现的隐式优先级相对较低)。然而,定义val z2有效,因为我们带来了reg2int纳入范围,并给予其更高的优先级。

有关编译器如何搜索隐式的更多详细信息,请参阅 Daniel Sobral 的非常好的解释:Scala 在哪里寻找隐式? https://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits

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

Scala 隐式转换范围问题 的相关文章

  • 使用空/空字段值创建新的数据框

    我正在从现有数据帧创建一个新数据帧 但需要在这个新 DF 中添加新列 下面代码中的 field1 我该怎么做 工作示例代码示例将不胜感激 val edwDf omniDataFrame withColumn field1 callUDF v
  • 对象内的类中的 Scala 抽象类型

    如果我这样做 object Parent class Inner extends Testable type Self lt Inner def inner new Inner object Child class Inner extend
  • Scala 中并发混合的最佳实践.Map

    The ScalaDoc http www scala lang org api current index html scala collection mutable ConcurrentMap关于并发Map 是这样说的 已弃用 自版本
  • 获取有关 Groovy 函数的信息(名称、签名、主体代码)

    我有一个 Groovy 文件 其中包含一堆简单的函数 如下所示 useful functions def myFunc1 String arg println Hello arg def myFunc2 String arg println
  • Scala 中的类型安全原语

    我希望在我的 Scala 代码中拥有类型安全的原语 子类 而不会受到装箱性能的影响 对于延迟非常低的应用程序 例如 这样的事情 class Timestamp extends Long class ProductId extends Lon
  • K均值||用于 Spark 上的情感分析

    我正在尝试编写基于Spark的情感分析程序 为此 我使用了 word2vec 和 KMeans 聚类 从 word2Vec 我在 100 维空间中得到了 20k 个单词 向量集合 现在我正在尝试对这个向量空间进行聚类 当我使用默认并行实现运
  • 如何找出哪个依赖项导致特定库被下载?

    运行我的 SBT 项目时 控制台输出中有一行 info downloading http repository nexus content groups public org jboss netty netty 3 2 3 Final ne
  • Scala:列表中不同的foldRight实现

    我刚刚发现 scala 我在 2 12 上 提供了完全不同的实现向右折叠 for 不可变列表 and 可变列表 不可变列表 List scala override def foldRight B z B op A B gt B B reve
  • 生成 k 个成对独立的哈希函数

    我正在尝试实施一个计数最小草图 http en wikipedia org wiki Count Min sketchScala中的算法 所以我需要生成k个成对独立的哈希函数 这是一个比我以前编写过的任何东西都低的级别 除了算法类之外 我对
  • 测试期权价值的更好方法?

    我经常发现自己Option T 对于某些类型T并希望根据某个值来测试期权的价值 例如 val opt Some oxbow if opt isDefined opt get lakes do something 以下代码是等效的 并且不需要
  • 如何编写从接口到另一种类型的隐式转换?

    我正在尝试做如下的事情 public class SomeWrapper ISomeWrapper public static implicit operator ActualRec ISomeWrapper someWrapper ret
  • 我可以使用从 Java 实现 java 接口的 scala 类吗?

    我正在学习 Scala 很好奇是否可以 创建一个在 Scala 中实现 Java 接口的对象 将对象编译成类文件并将其打包 使用 Java 中的对象 我想在 scala 中实现一个自定义的 lucene 查询解析器 并能够让其他人从 jav
  • Scala 修饰符和类型参数化

    我正在创建一个记忆类 每个类都会记忆一个函数类型并具有以下定义 class MemoizedFunction1 T1 R f T1 gt R private this val cache mutable Map T1 R def apply
  • 在 Scala REPL 中访问包私有方法

    假设我有一个private stuff method Stuff something in org my stuff 我可以在 Scala REPL 中做些什么 以便我可以调用Stuff something没有得到错误error value
  • 这个错误是什么意思(SimpleHttpConnectionManager 被错误使用)?

    我正在尝试从 ElasticSearch 中读取数据到 Spark conf es resource sflow sflow es nodes ES01 es query some query rdd sc newAPIHadoopRDD
  • Scala Eclipse 自动完成功能损坏?

    我正在尝试让自动完成功能在 Eclipse 中用于 Scala 开发 我试图从 Scala 类引用 java 类 但自动完成功能从未找到它 例如 以这个 scala 类为例 object Main def main args Array S
  • 我需要比较两个数据帧以进行类型验证并发送非零值作为输出

    我正在比较两个数据帧 基本上 这些是两个不同数据源的模式 一个来自 hive 另一个来自 SAS9 2 我需要验证两个数据源的结构 因此我将模式转换为两个数据帧 它们是 SAS 架构将采用以下格式 scala gt metadata sho
  • JavaFX 控制器如何访问其他服务?

    我将 JavaFX 2 与 Scala 一起使用 我有class Application extends javafx application Application它执行诸如读取应用程序配置等操作 然后它会启动主窗口 该主窗口需要连接到一
  • JavaScript 中 Scala View 的等效项

    在斯卡拉中 view允许防止创建全新的集合 例如在Scala中 视图 有什么作用 https stackoverflow com questions 6799648 in scala what does view do JavaScript
  • 将数组中的值提取到元组中

    有没有一种简单的方法可以将列表的值提取到 Scala 中的元组中 基本上是这样的 15 8 split map toInt mkTuple 15 8 或者我可以采取其他方式 val x y 15 8 split map toInt 如果你把

随机推荐

  • Node.js 进行 rsa 加密的正确方法?

    我正在尝试创建一个 WS 来发出肥皂请求 在消息正文中有一个包含加密文本的字段 我有公钥来加密文本 但我获得的唯一结果是文本无法识别 我使用节点的加密模块来发出请求 并且文本已加密 但我不知道为什么没有正确加密 PS我用 openssl p
  • 使用请求验证 SSL 证书

    我正在尝试验证 SSL 但它不起作用 我在浏览器上访问了我想要访问的机密网站 在 Chrome 上 我单击了储物柜 gt 证书 gt 详细信息 gt 复制到文件 gt base64 gt cert cer 我的代码是 test reques
  • 规范化现有的 MS Access 数据库

    我有一个大型访问数据库 需要将其规范化为五个表和一个查找表 我了解标准化背后的理论 并且已经勾勒出表格的外观 但我不知道如何转换我的表格以使数据库标准化 表分析器没有提供我想要的细分 如果您只有一个表 请向其中添加自动编号字段 然后创建其他
  • 路径中包含空格的 Firestore 安全规则

    我需要为名为 测试用例 的子集合创建一个 firestore 规则 由于 firestore 规则不是用 javascript 编写的 因此我似乎无法在匹配后获取路径来接受空格而不会出现错误 我尝试过引号 转义字符的反斜杠 以及将整个路径放
  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • Flutter 容器的 onTap 方法

    一直在开发一个 flutter 应用程序并根据一些 Firebase 数据动态构建一些容器 我想知道是否有办法获得容器的 onTap 方法 或任何不是按钮的小部件 这是一个代码示例 child new Container INSERT ON
  • 如何让CQRS适应项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现了一个新术语 名叫CQRS 命令查询职责分离 http martinfowler com bliki CQRS html其中指出 概念模型
  • 使用转义序列渲染文本(如终端)

    你好 我正在寻找一些库或工具来在文本文件中呈现带有转义序列字符的文本 我不知道如何称呼它 但这是一个例子 echo e abc vdef abc def echo e abc vdef gt tmp xxxxx vi tmp xxxxx 我
  • Magento 中的 jquery/prototype 冲突

    这是一个基于 Themeforest 的 Acumen 主题的 Magento 商店 出乎意料的是 jquery 的东西现在不起作用了 Acumen 通过 magento 静态块加载 jquery 但这些都没有被触及 昨天我正在努力添加 j
  • 输入类型=“时间”超过24小时

    我刚刚遇到以下问题 在网络应用程序用户界面中 我希望用户输入响应消息的时间范围 以小时为单位 时间范围应最长为 72 小时 我们很乐意使用
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • jqgrid 在编辑框中选择不正确的下拉选项值

    我正在使用表单编辑 表单中有两个选择框 一个选择框是国家 地区 另一个选择框是州 州选择框取决于所选的国家 地区 并将动态填充 例如 Country 美国 期权价值 1 英国 期权价值 2 美国的状态 阿拉巴马州 选项值 1 加利福尼亚州
  • 为什么 Kotlin 数据类可以在 Gson 的不可空字段中包含空值?

    在 Kotlin 中你可以创建一个data class data class CountriesResponse val count Int val countries List
  • 自动计算Excel VBA UDF与单元格属性相关

    我编写了一个 UDF 来计算特定颜色和特定线条样式的单元格 我发布了整个函数 Function CountTime rData As Range cellRefColor As Range As Variant Dim indRefColo
  • Azure 错误 - 连接字符串困难

    我正在 vs 2015 中使用 mvc5 应用程序 每当我尝试从数据库访问项目时都会收到错误 用户 your username 登录失败 当我进入 Azure 门户时 允许访问 Azure 服务 设置处于打开状态 并列出了我的客户端 IP
  • Intellij Idea 终端快捷方式不起作用

    我目前正在使用 Intellij Idea 2016 2 4 并在 Windows 10 上运行 我注意到Alt F12打开终端的命令和Alt F7用于查找特定方法的用法的命令均已停止工作 我已经尝试过以下方法 文件 gt 使缓存无效并重新
  • 用 @DataJpaTest 注释的测试不是用 @Autowired 注释的自动装配字段

    我有一个 Spring Boot 应用程序 其中包含 Spring Data Jpa 存储库 我需要围绕这个存储库运行单元 或组件 测试 我对 Spring Data Jpa 没有太多经验 这是我的测试 这很简单 我无法让它通过 impor
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 设置缩略图内容类型

    我需要设置Content Type对于缩略图 我已经尝试如下所示 但它不起作用 仍然 它存储为流 天青功能 索引 json var Jimp require jimp module exports context myBlob gt Rea
  • Scala 隐式转换范围问题

    采取这个代码 class Register var value Int 0 def getZeroFlag Boolean value 0x80 0 object Register implicit def reg2int r Regist