2010-03-19 93 views
4

我想做一个类,它接受任何有序的东西,打印更大。 (我刚学,所以我知道这是一个有点用处)参数扩展一个类

class PrinterOfGreater[T extends Ordered](val a:T, val b:T){println(a > b)} 

我知道,它不能被这种风格在Scala中写的,但我不知道如何得当写...有人知道吗?

为什么这不能编译?乳清串包装是有序

class PrinterOfGreater[T <: Ordered[T]](a:T, b:T){println(a > b)} 
object A extends Application{new PrinterOfGreater("abc","abd")} 

回答

6

关于第二个问题:String(在Scala中只是java.lang.String,至少在针对Java/JVM平台时)没有定义关系运算符>。但是,可以通过更换容易地容纳这个<:<%它指定绑定所谓视图,这意味着在A <% BA是任B亚型或存在的范围的隐式转换,将产生一个B时给出A

这适用于String因为Scala的标准库提供的隐式从字符串转换到RichString(Scala中2.7)或StringOps(Scala中2.8),其中关系运算符定义。

4

你想

class PrinterOfGreater[T <: Ordered[T]](val a:T, val b:T){println(a > b)} 

<:手段“是的子类”(就像extends确实在Java中),并且Ordered本身是参数,并且你想成为明确表示您试图比较T,因此您指定Ordered[T]