【发布时间】:2025-12-29 02:40:06
【问题描述】:
更新: 我误解了一条错误消息,所以这个问题是无效的。
val inputIds = Array[Any](7, 1, 3)
足以在 Scala 中创建一个 Array[Any]。
============
我正在尝试创建一个数组,该数组需要传递给采用 Array[Any] 的方法,但值是数字。
起初我只是尝试了创建数组的常规方法:
val inputIds = Array(7, 1, 4)
并得到错误:
Type mismatch, expected: Array[Any], actual: Array[Int]
(来自 IntelliJ 编辑器,我想我没有检查它是否正确)
然后我尝试直接创建整数值,例如作者:
Integer.getInteger("7")
并将它们传递给 Array 构造函数,但我一直收到同样的错误。
现在我尝试了:
val inputIds: Array[Any] = Array[Any](7, 1, 4)
它给了我:
Type mismatch, expected: Array[Any], actual: Array[Array[Int]]
你可以说我有点闲,我想要的只是包装类型而不是原语!我猜 Scala 正在尝试优化数组以进行迭代,但我需要的只是一个小数组,我可以将其传递给 var args 以获取混合类型的数组。或者也许是创建该 vararg 方法的更好方法?现在它的类型是:
Array[Any]*
========
好的,所以我解决了我最初的问题(尽管在 cmets 中仍然存在关于我是否正确理解导致错误的原因的争议)。但是,它并没有解决我的问题,如下:
我正在尝试转置具有不同类型的数组数组(有些是嵌套的,但最终是 Double 或 Ints)并且无法弄清楚如何让 scala 类型系统来执行此操作。这是基本示例:
val integerArray = Array(7, 1, 4)
val nestedIntegerArray = Array(
Array(6, 10, 60),
Array(5, 89, 57),
Array(15, 3, 5)
)
val nestedDoubleArray = Array(
Array(.13, .9, .8),
Array(.2, .777, .57),
Array(.15, .3, .5)
)
val brokenComputation = typeErrorExample(integerArray, nestedIntegerArray, nestedDoubleArray)
被调用的方法在哪里:
private def typeErrorExample(arrays: Array[_ <: Any]*)={
val arrayDataFrame = Array(arrays).transpose
}
这给出了错误:
No implicit view available from Seq[Array[_]] => Array[U].
[INFO] val arrayDataFrame = Array(arrays).transpose
这样做的正确方法是什么?我应该改用非数组数据结构吗?
希望拥有更多代码也能帮助专家了解导致我最初错误的原因。 (inputIds 被重命名为 integerArray 以保持一致性)。
【问题讨论】:
-
val inputIds: Array[Any] = Array[Any](7, 1, 4)适合我。你确定那是你尝试过的吗? -
@JoePallas 是的,我复制粘贴了代码。刚刚尝试实际编译它,它给出了这个错误:[INFO] found : Array[Array[Int]] [INFO] required: Array[Any] [INFO] 注意:Array[Int] <: any array t>_ <: Any。 (SLS 3.2.10)
-
问题很混乱。将
Array[Any]作为参数的方法将接受Array[Int]而不会出错。 -
@jwvh 用更大的代码 sn-p 更新了我的问题,这可能会为您澄清一些事情。
-
发布 minimal reproducible example of
Array[Any](7, 1, 4)失败,如果失败。
标签: scala