gpt4 book ai didi

scala - 为什么 javaBigDecimal2bigDecimal 隐式不适用?

转载 作者:行者123 更新时间:2023-12-05 00:00:19 24 4
gpt4 key购买 nike

使用 Scala 2.9.2 这段代码:

BigDecimal(1) + 新的 java.math.BigDecimal("1")
新的 java.math.BigDecimal("1") + BigDecimal(1)

不编译,因为 scala.math.BigDecimal$#javaBigDecimal2bigDecimal 不适用于第二种情况

但是,如果我在它之前定义相同的隐式,代码将编译:

BigDecimal(1) + 新的 java.math.BigDecimal("1")
隐式 def javaBigDecimal2bigDecimal(x: java.math.BigDecimal): BigDecimal = BigDecimal(x)
新的 java.math.BigDecimal("1") + BigDecimal(1)

为什么这样?

最佳答案

在第一个表达式中 BigDecimal(1) + new java.math.BigDecimal("1")作品规则:

Compiler will look for implicits defined within any object of the implicit scope of the type it's looking for.



所以,有一个方法 +(BigDecimal): BigDecimalscala.math.BigDecimal .编译器看到错误的参数类型( java.math.BigDecimal )并开始寻找到类型 BigDecimal 的转换.作用域内找不到,然后在 BigDecimal中查找对象并找到 javaBigDecimal2bigDecimal .

如果存在 javaBigDecimal2bigDecimal,则第二个示例将起作用范围内的转换,因为 java.math.BigDecimal没有 +方法,编译器会寻找到正确类型的转换(有方法 +(BigDecimal))

关于scala - 为什么 javaBigDecimal2bigDecimal 隐式不适用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com