如何在 Scala 中定义"global implicit class"?



考虑到隐式类"必须在另一个特征/类/对象内部定义"1,如何全局定义隐式转换?

情况是我想向应用程序中的所有Strings(或Lists)添加一个方法,或者至少添加到它的几个包中。

无论是在Java中还是在Scala中,都不能在"全局"范围内添加任何东西。但是,在 Scala 中可以定义 package objects ,它可以包含在整个包中使用的方法,并且可以由用户轻松导入。

这看起来像这样:在目录中foo/bar/baz创建一个名为 package.scala 的文件,其中包含以下内容:

package foo.bar
package object baz {
  implicit def incrediblyUsefulConversion(s: String) = ...
}

然后,用户可以在其代码中执行以下操作来激活转换:

import foo.bar.baz._

或者也许

import foo.bar.baz.incrediblyUsefulConversion

当然,您也可以像任何其他用户一样在其他包中使用自己的代码。

最新更新