Scala多重隐式转换?

Scala多重隐式转换?,scala,implicit-conversion,Scala,Implicit Conversion,我不理解我在以下代码(Scala 2.9)中看到的明显矛盾的行为: 等级Pimp1(val x:Double){ def plus(that:Pimp1)=x+that.x def这对我来说很有意义。第一个有效的方法如下: Double有一个pluss方法吗?不,我们能隐式地把它转换成它能用的东西吗?是的。好的,现在我想应用pluss方法。它有一个选项吗?不。我能隐式地把选项转换成它能用的东西吗?是的 第二个是这样的: Double有一个

我不理解我在以下代码(Scala 2.9)中看到的明显矛盾的行为:

等级Pimp1(val x:Double){
def plus(that:Pimp1)=x+that.x

def这对我来说很有意义。第一个有效的方法如下:

Double有一个pluss方法吗?不,我们能隐式地把它转换成它能用的东西吗?是的。好的,现在我想应用pluss方法。它有一个选项吗?不。我能隐式地把选项转换成它能用的东西吗?是的

第二个是这样的:


Double有一个<方法吗?是的。它接受一个选项吗?否。我可以隐式地将选项转换为<确实接受?否。

这很有趣,因为如果你反转它,它会工作:一些(5.0)<5.0正确。scala编译器不会尝试为已经具有所需方法的对象查找隐式转换。选项没有比较,因此某些(5.0)<0可以工作。
class Pimp1(val x : Double) {
  def pluss(that : Pimp1) = x + that.x
  def <(that : Pimp1) = x < that.x
}

object Pimp1 {
implicit def d2pimp(d : Double) = new Pimp1(d)
implicit def d2pimp(od : Option[Double]) = new Pimp1(od.get)
} 

object Scratch2 extends App {
    import Pimp1._

    5.0.pluss(Some(5.0))
    5.0 < Some(5.0)
}
def <(that : Option[Double]) = x < that.get