考虑在无形回购中找到的单例函数的定义:
/** Polymorphic function selecting an arbitrary element from a non-empty `Set`. */
object choose extends (Set ~> Option) {
def apply[T](s : Set[T]) = s.headOption
}
def
将其与以下示例中的传统语法进行对比:
package utils
object UtilWithASingleMethod {
def isSatisfyingSomePredicate(foo: Foo): Boolean = ???
}
相对
package utils
object isSatisfyingSomePredicate extends (Foo => Boolean) {
def apply(foo: Foo): Boolean = ???
}
请注意呼叫站点现在如何变为
isSatisfyingSomePredicate(foo)
代替
UtilWithASingleMethod.isSatisfyingSomePredicate(foo)
或者
import UtilWithASingleMethod._
isSatisfyingSomePredicate(foo)
就个人而言,UtilWithASingleMethod
package 似乎只是为了能够使用熟悉的def
语法而没有添加任何有用的信息。
除了诸如不熟悉或与工厂模式中使用的对象+应用样式混淆等主观缺点外,单例函数定义是否有任何技术缺点?