我想做一个接受任何订购和打印更多的课程。 (我只是在学习,所以我知道这有点无用)
class PrinterOfGreater[T extends Ordered](val a:T, val b:T){println(a > b)}
我知道scala中不能用这种风格写出来,但我不知道怎么写得恰到好处......有人知道吗?
为什么这不编译?乳清字符串包装器是Ordered
class PrinterOfGreater[T <: Ordered[T]](a:T, b:T){println(a > b)}
object A extends Application{new PrinterOfGreater("abc","abd")}
答案 0 :(得分:6)
关于您的第二个问题:String
(在Scala只是java.lang.String
,至少在定位Java / JVM平台时)没有定义关系运算符>
。但是,您可以轻松地将<:
替换为<%
来指定所谓的视图绑定,这意味着A <% B
A
是B
的子类型,或者在范围内存在隐式转换,在给定B
时会产生A
。
这适用于String
,因为Scala的标准库提供从String到RichString
(在Scala 2.7中)或StringOps
(在Scala 2.8中)的隐式转换,其中关系运算符 已定义。
答案 1 :(得分:4)
你想要
class PrinterOfGreater[T <: Ordered[T]](val a:T, val b:T){println(a > b)}
<:
表示“是”的子类(就像extends
在Java中所做的那样),Ordered
本身是参数化的,你想清楚你正在尝试比较T
,因此您指定Ordered[T]
。