Scala不能乘Java Doubles吗?

标签 scala

在Scala中使用Java类时,我注意到Scala不能乘以Java Double。这是一个例子:

scala> val x:java.lang.Double = new java.lang.Double(34.0)
x: java.lang.Double = 34.0

scala> val y:java.lang.Double = new java.lang.Double(2.1) 
y: java.lang.Double = 2.1

scala> x*y
<console>:7: error: value * is not a member of java.lang.Double
       x*y
        ^

哇!我猜是因为Scala运算符只是方法,所以它试图调用Java Double类的乘法方法(即“34.0。*(2.1)”)。哎呀。有一种简单的方法可以进行此互操作吗?

最佳答案

我将隐式转换为Scala Double

implicit def javaToScalaDouble(d: java.lang.Double) = d.doubleValue

现在您的代码可以正常工作了!同样,像1.2 + x这样的表达式也可以工作。由于自动装箱代码的存在,因此可以进行以下编译,而无需进行隐式转换。
def foo(d: java.lang.Double) = println(d)
val z: scala.Double = 1.2
foo(z)

-Flaviu Cipcigan

关于Scala不能乘Java Doubles吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545229/

相关文章:

scala - 在 scala 中链接函数调用(或等同于 Ruby 的 yield_self)

java - 玩! 2 从 Controller 在 View 中渲染 JSON 数据

scala - 如何(重新)定义在根项目上运行以在 sbt 0.13 中启动聚合的 Play(子)项目

scala - 如何创建仅给出开始和结束以及步骤数的非线性数字序列

scala - LIFT 设置 Web 项目 : generate with mvn, 并使用 sbt 进行管理

类似 scala 比较器的序列函数

android - Scala 隐式动态转换

scala - 按时间戳排序不适用于 Scala Spark 中的日期时间列

arrays - 我的 scala 过滤器循环不起作用?

scala - 暂时禁用 Play Framework 中的缓存