例如,在Objective-C中,类扩展是直接语言构造,我们这样做:
在提交名为NSArray + FKBinarySearch.h的文件中:
@interface NSArray (FKBinarySearch)
// ...
@end
Run Code Online (Sandbox Code Playgroud)
您是否将扩展类命名为:
implicit class IndexedSeqBinarySearch[A](seq: IndexedSeq[A]) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
例如,scalaz调用使用后缀Ops:BooleanOps进行扩展类,甚至扩展自己的特性FoldableOps
但Ops感觉太笼统了,OTOH有包装.同样Ops在scalaz情况下包含的一切.
use*_*379 10
在"第21章·隐式转换和参数" 中的Scala编程 - >"命名隐式转换".据说:
隐式转换可以具有任意名称.隐式转换的名称仅在两种情况下才有意义:如果要在方法应用程序中显式写入,以及确定程序中任何位置可用的隐式转换.
在Scala编程 "第5章:隐含" - >"明智地使用含义"中说:
提高implicits可见性的一种方法是采用将隐式值放在名为implicits的特殊包或名为Implicits的对象中的做法.
使用隐式类就像使用隐式方法一样,但是在类的情况下,它涉及主要的构造函数.如果你看看Scala隐式转换方法的结果,你可以找到类似的东西:
- wrapString(s:String):WrappedString
- genericArrayOps [T](xs:Array [T]):ArrayOps [T]
在我看来,Implicits对于隐式类名称,可以使用以下内容:
- xOps
- RichX
- WrappedX
- ASX
您可以选择适合您项目条件的任何一种.
不,实际上并没有一个既定的惯例。@srgfed01 列出了一些方法(我在野外看到的其他约定:在名为而不是的X对象中进行隐式转换,以及包装的隐式类),但是您将在现有的 scala 库中看到所有这些以及更多内容 -有时同一库中有多种不同的约定。没有什么比隐式转换的样式更完善的了,也许是因为隐式类是一个相对较新的功能。ImplicitXImplicitsPimpedXXx2y
因此,选择您喜欢的风格,并准备好在您使用的库中的许多不同约定下寻找隐式。