Scala中是否有可以向Array对象添加方法的模式?
我正在考虑将Int隐式转换为RichInt。但是这不可能,因为Array是最后一个类。
答案 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中)。