扩展通用特征的多维不规则数组

时间:2013-11-21 04:32:06

标签: arrays scala multidimensional-array initializer-list

假设我有一个特征Foo,这个特征采用泛型Bar,因此Foo的定义看起来就像

trait Foo[C <: Bar] {
    def updateState(state : C) : C;
}

,我有几个扩展action1的{​​{1}},action2action3 ... action9类。

现在,假设我想显式初始化这些操作的二维数组。

我试过

Foo

以及添加Array[Foo[Bar]]( Array(new action1, new action2), Array(new action2, new action3)... ) Array[Foo[Bar]]( Array[Foo[Bar]](new action1, new action2), Array[Foo[Bar]](new action2, new action3)... ) 条形[Foo[Bar]]而没有条形的大多数排列,使主数组[Foo]等。

我使用

找到了解决问题的方法
Array[Array[Foo[Bar]]]

并手动初始化每个维度,但我想知道是否有某种方法可以显式初始化实现通用特征的类型的2d数组...是的,我知道有大约3个用例来执行此操作(不是真的,但不是很常见)所以答案就像“你为什么要这样做?”或者“有更好的方法来处理bla bla bla”对我不会太有影响。

1 个答案:

答案 0 :(得分:1)

如果您可以定义项目索引与类实例之间的关系,请使用:

tabulate[T](n1: Int, n2: Int)(f: (Int, Int) ⇒ T)

示例:

Array.tabulate(5, 5) {
  case (i, j) => new action(i, j)
}

<强>更新

scala> :paste
// Entering paste mode (ctrl-D to finish)    
trait Bar
class Foo[C <: Bar]

Array.tabulate(5, 5) {
  case (i, j) => new Foo[Bar]()
}

// Exiting paste mode, now interpreting.

defined trait Bar
defined class Foo
res1: Array[Array[Foo[Bar]]] = Array(Array(Foo@5e1c4451, Foo@11c9521c, Foo@382db563, Foo@40df9365, Foo@1645ed29), Array(Foo@48d52a2b, Foo@22c39268, Foo@55c0fbac, Foo@70cb052f, Foo@20c18a83), Array(Foo@26caf42, Foo@2d66174c, Foo@98395dd, Foo@1de3e50c, Foo@5cd28628), Array(Foo@165dbb4, Foo@463b0723, Foo@4d51aeda, Foo@2dae91de, Foo@1fea9d40), Array(Foo@63f9e51e, Foo@2b3147d9, Foo@30640db6, Foo@78c0408b, Foo@15cda39c))