例如,在Objective-C中,类扩展是直接语言构造,我们这样做:
在名为NSArray+FKBinarySearch.h的文件中:
@interface NSArray (FKBinarySearch)
// ...
@end
您是否将扩展类命名为:
implicit class IndexedSeqBinarySearch[A](seq: IndexedSeq[A]) {
// ...
}
例如,scalaz调用会生成带后缀Ops
的扩展类:BooleanOps甚至扩展自己的特征FoldableOps
然而Ops
感觉太笼统,OTOH有包裹。另外,scalaz案例中的Ops
包含所有内容。
答案 0 :(得分:10)
在“第21章·隐式转化和参数”中的Programming in Scala中 - > “命名隐式转换。”据说:
隐式转换可以有任意名称。隐含的名称 转换只在两种情况下才有意义:如果你想写它 显式地在方法应用程序中,并用于确定哪个隐式 转换可在程序中的任何位置使用。
在Programming Scala“第5章:隐含” - >据说“明智地使用隐含”:
提高隐含可见性的一种方法是采用这种做法 将隐式值放在名为implicits或a的特殊包中 对象名为Implicits。
使用隐式类就像使用隐式方法一样,但是在类的情况下,它涉及主要的构造函数。如果你看看Scala隐式转换方法的结果,你可以找到类似的东西:
- wrapString(s:String):WrappedString
- genericArrayOps [T](xs:Array [T]):ArrayOps [T]
在我看来,Implicits
对象内部隐式类名可以使用以下内容:
- xOps
- RichX
- WrappedX
- ASX
您可以选择适合您项目条件的任何一种。
答案 1 :(得分:3)
不,没有真正的既定惯例。 @ srgfed01列出了一些方法(我在野外看到的其他约定:X
中的ImplicitX
而不是Implicits
的隐式转换,以及PimpedX
的隐式转换包装X
)的类,但你会在现有的scala库中看到所有这些以及更多 - 有时在同一个库中有多个不同的约定。没有像隐式转换的x2y
样式那样完善,也许是因为隐式类是一个相对较新的特性。
因此,选择您喜欢的样式,并准备好在您使用的库中查找许多不同约定下的含义。
答案 2 :(得分:1)
标准的lib有StringOps
。
邮件列表上的某个人将我转向了“荒谬描述性的反引号标识符”,以避免命名冲突之间的冲突。
OTOH,也许你想让客户通过阴影来关闭隐含的东西。