我想为以下类型创建一个存储:
List(List(2.3,1.1),List(2.2, 1))
但如果我执行以下操作:
var y = List(List (1.0, 2.2), List(2, 1.1, -2.1))
然后它创建为 List[AnyVal] 并在我尝试执行数学运算时给出错误:
y(0)(0) * 2 // Error - value '2' is not a member of AnyVal
在两个示例中,一个列表都包含一个 Int 数字(第一种情况下最后一个 1 ,第二个列表的第一个元素为 2 ),其余数字都是 Double 。
因此,列表元素的推断类型将是 AnyVal,这是它们的第一个公共超类型,因此您的外部列表将变为 List[List[AnyVal]]。
如果您也尝试使用 scala 2.8,那么它应该使用 Numeric 而不是 AnyVal,因为它成为 Double 和 Int 的超类型。大多数数字运算(在您的情况下是乘法)也适用于它们。
要解决 2.7.x 的问题,只需使用 Doubles 作为这些值(1.0 或 1D)。
将类型显式声明为 List[List[Double]] 可能也会有所帮助。在这种情况下,您提供的 Int 值将转换为 Doubles。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)