为什么 Scala 更喜欢隐式参数而不是扩展特征?
Why does Scala prefer implicit parameters over extending a trait?
Scala 排序 API 使用隐式对象。
例如:
def msort[T](xs: List[T])(implicit ord: Ordering) = { ...}
Java 出于相同目的使用 Comparable 接口。
public static <T extends Comparable<? super T>> void sort(List<T> list) { ... }
为什么 Scala 更喜欢隐式类型而不是扩展特征?隐式参数有什么好处?
对于给定类型,您可以将 msort
与多个 Ordering
一起使用。扩展 Comparable
的类型只能以一种方式扩展它。 (有些人认为这是一个缺点。)
您可以为在不知情的情况下实现的类型提供 Ordering
(例如,任何 Java 类型!)。你不能使现有类型扩展 Comparable
如果它还没有。
Scala 排序 API 使用隐式对象。 例如:
def msort[T](xs: List[T])(implicit ord: Ordering) = { ...}
Java 出于相同目的使用 Comparable 接口。
public static <T extends Comparable<? super T>> void sort(List<T> list) { ... }
为什么 Scala 更喜欢隐式类型而不是扩展特征?隐式参数有什么好处?
对于给定类型,您可以将
msort
与多个Ordering
一起使用。扩展Comparable
的类型只能以一种方式扩展它。 (有些人认为这是一个缺点。)您可以为在不知情的情况下实现的类型提供
Ordering
(例如,任何 Java 类型!)。你不能使现有类型扩展Comparable
如果它还没有。