当前位置:  开发笔记 > 编程语言 > 正文

如何在Scala中创建异构数组?

如何解决《如何在Scala中创建异构数组?》经验,为你挑选了2个好方法。

在javascript中,我们可以这样做:

["a string", 10, {x : 1}, function() {}].push("another value");

什么是Scala等价物?



1> Daniel Spiew..:

Scala中的数组非常均匀.这是因为Scala是一种静态类型语言.如果您确实需要伪异构功能,则需要使用协变参数化的不可变数据结构(大多数不可变数据结构). List是那里的典型例子,但Vector也是一种选择.然后你可以做这样的事情:

Vector("a string", 10, Map("x" -> 1), ()=>()) + "another value"

结果将是类型Vector[Any].在静态类型方面不是很有用,但一切都将按照承诺在那里.

顺便提一下,Scala中数组的"文字语法" 如下:

Array(1, 2, 3, 4)     // => Array[Int] containing [1, 2, 3, 4]

另请参见:有关持久向量的更多信息


这个答案非常令人困惑 - 事实是OP的示例与Scala`Array`完全正常,正如@ soc的答案所示.还有其他选项,如`List`和`Vector`,但使用它们或不使用它们的原因与用例是同构还是"伪异构"无关.
不,这真的是斯卡拉当地人的言论.这完全正常.(我的意思是说老实说;我根本不想讽刺.)
是不是也可以将所有这些东西打包成`Tuple`,因为"元组将固定数量的项目组合在一起,以便它们可以作为一个整体传递.与数组或列表不同,元组可以容纳对象不同类型." (摘自http://www.artima.com/pins1ed/collections.html)?

2> soc..:

Scala将选择可以保存所有值的最具体的Array元素类型,在这种情况下,它需要最通用的类​​型Any,它是每种其他类型的超类型:

Array("a string", 10, new { val x = 1 }, () => ()) :+ "another value"

结果数组将是类型Array[Any].

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有