4

メソッドをArrayオブジェクトに追加できるScalaのパターンはありますか?

Int から RichInt への暗黙的な変換を考えています。しかし、Array は final クラスであるため、それはできません。

4

2 に答える 2

11

他の暗黙的な on との名前の衝突を回避する限りArray(たとえばArrayOps、コレクション メソッドを追加する 2.8 では)、通常の暗黙的な pimp-my-library パターンを使用して拡張できます。

class FooArray[T](at: Array[T]) {
  def foo() = at.length*at.length
}
implicit def array2foo[T](at: Array[T]) = new FooArray(at)
scala> Array(1,2,3).foo
res2: Int = 9
于 2010-05-06T05:21:12.067 に答える
6

暗黙的な変換はfinal、入力クラスの -ness によって妨げられません。Stringたとえば、RichString(Scala 2.7) またはStringOps(Scala 2.8) への暗黙的な変換があります。

Array したがって、1 つの重要な注意事項があれば、 for の暗黙的な変換を自由に定義できます。Scala に組み込まれているArraytoからの暗黙的な変換は無視する必要がありますArrayOps(Scala 2.8 のみ)。

于 2010-05-06T05:01:32.860 に答える