4

Scala 中是否有可以向 Array 对象添加方法的模式?

我正在考虑将 Int 隐式转换为 RichInt。但这无法做到,因为 Array 是最终类。

4

2 回答 2

11

只要您避免与任何其他隐式名称冲突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 通过一个关键警告自由定义隐式转换:您必须放弃 Scala 的内置隐式转换 from Arrayto ArrayOps(仅在 Scala 2.8 中)。

于 2010-05-06T05:01:32.860 回答