Scala 为什么我可以使用视图边界而不是上限来比较字符串?

Scala 为什么我可以使用视图边界而不是上限来比较字符串?,scala,Scala,在下面的示例中,我可以使用视图边界来比较两个字符串,但不能使用上限,即使在REPL上,也可以“a”Ordered[T]表示“隐式值,这是一个函数”和“隐式转换”。这有点混乱,IIRC将在Dotty/Scala 3中进行更改隐式排序:这里的排序[T]仅表示“隐式值”,谢谢。implicit视图:T=>Ordered[T]是否表示隐式转换,implicit val顺序:Ordered[T]是否表示隐式值?我阅读另一个问题是为了理解隐式值和隐式转换之间的区别-。@ManuChadhaimplicit

在下面的示例中,我可以使用
视图边界
来比较两个
字符串
,但不能使用
上限
,即使在REPL上,
也可以<代码>“a”<“b”
被删除为

scala.Predef.augmentString("a") < "b"

尽管通常认为使用类型类是最佳实践。这里,我们有标准库中的
scala.math.Ordering

import Ordering.Implicits._ // brings operators like "<" into the scope

class Person[T](val fn: T, val ln: T)(implicit val order: Ordering[T]) {
  def greater = if (fn > ln) fn else ln
}
没错<代码>“a”<“b”被删除为

scala.Predef.augmentString("a") < "b"

尽管通常认为使用类型类是最佳实践。这里,我们有标准库中的
scala.math.Ordering

import Ordering.Implicits._ // brings operators like "<" into the scope

class Person[T](val fn: T, val ln: T)(implicit val order: Ordering[T]) {
  def greater = if (fn > ln) fn else ln
}

谢谢
implicit视图:T=>Ordered[T]
是否表示隐式转换,
implicit val顺序:Ordered[T]
是否表示隐式值?我阅读另一个问题是为了理解隐式值和隐式转换之间的区别-。@ManuChadha
implicit view T=>Ordered[T]
表示“隐式值,这是一个函数”和“隐式转换”。这有点混乱,IIRC将在Dotty/Scala 3中进行更改<代码>隐式排序:这里的排序[T]仅表示“隐式值”,谢谢。
implicit视图:T=>Ordered[T]
是否表示隐式转换,
implicit val顺序:Ordered[T]
是否表示隐式值?我阅读另一个问题是为了理解隐式值和隐式转换之间的区别-。@ManuChadha
implicit view T=>Ordered[T]
表示“隐式值,这是一个函数”和“隐式转换”。这有点混乱,IIRC将在Dotty/Scala 3中进行更改<代码>隐式顺序:此处的排序[T]仅表示“隐式值”
import Ordering.Implicits._ // brings operators like "<" into the scope

class Person[T](val fn: T, val ln: T)(implicit val order: Ordering[T]) {
  def greater = if (fn > ln) fn else ln
}
import Ordering.Implicits._ // brings operators like "<" into the scope

class Person[T: Ordering](val fn: T, val ln: T) {
  def greater = if (fn > ln) fn else ln
}
assert { new Person("manu", "chadha").greater == "manu" }