说我定义一个具有如下顺序的类:
case class C(i: Int)
implicit def ordering[A <: C]: Ordering[A] = new Ordering[A] {
def compare(c1: A, c2: A): Int = c1.i.compareTo(c2.i)
}
我从编译器获得以下信息:
较少将表达式转换为单一抽象方法(Ctrl + F1) 检查信息:检查表达式是否可以转换为SAM (单一抽象方法)。 之前:new Thread(new Runnable { 覆盖def run()= println()}
之后:new Thread(()=> println())
但是对我来说,在这种情况下正确的语法是什么并不明显?我已经尝试过下面的代码,但无法编译:
implicit def ordering[A <: C]: Ordering[A] = new Ordering[A]((c1: A, c2: A) => c1.i.compareTo(c2.i))
答案 0 :(得分:3)
正确的语法是:
implicit def ordering[A <: C]: Ordering[A] = (c1: A, c2: A) => c1.i.compareTo(c2.i)
当使用一个且只有一个方法创建特征的实例时,将使用单个抽象方法。
SAM来自java8,在scala 2.12中引入: