Scala中是否有一个Pattern向Array对象添加方法?

时间:2010-05-06 04:07:09

标签: class scala arrays design-patterns final

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

我正在考虑将Int隐式转换为RichInt。但是这不可能,因为Array是最后一个类。

2 个答案:

答案 0 :(得分:11)

只要避免与Array上的任何其他隐式名称冲突(例如2.8中的ArrayOps,这会添加集合方法),您可以使用普通的隐式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

答案 1 :(得分:6)

输入类的final - 不会阻止隐式转换。例如,String隐式转换为RichString(Scala 2.7)或StringOps(Scala 2.8)。

因此,您可以自由地为Array 定义隐式转化,但需要注意一点:您必须放弃Scala从Array到{{1}的内置隐式转换(仅在Scala 2.8中)。