使用asInstanceOf将Any转换为Double

use*_*635 11 scala

我有一个函数,它接受可变数量的参数.第一个是String,其余是数字(Int或Double),所以我使用Any*来获取参数.我想将数字统一地视为双打,但我不能在数字参数上使用asInstanceOf [Double].例如:

 val arr = Array("varargs list of numbers", 3, 4.2, 5)
 val d = arr(1).asInstanceOf[Double]
Run Code Online (Sandbox Code Playgroud)

得到:

 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?(该功能需要添加所有数字).

Ran*_*ulz 4

ScalaasInstanceOf是它的铸造名称。铸造不是转换。

你想要的可以这样完成:

val mongrel = List("comment", 1, 4.0f, 9.00d)
val nums = mongrel collect { case i: Int => i case f: Float => f case d: Double => d }
val sumOfNums = nums.foldLeft(0.0) ((sum, num) => sum + num)
Run Code Online (Sandbox Code Playgroud)