参数扩展了一个类

时间:2010-03-19 14:29:52

标签: scala type-parameter

我想做一个接受任何订购和打印更多的课程。 (我只是在学习,所以我知道这有点无用)

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")}

2 个答案:

答案 0 :(得分:6)

关于您的第二个问题:String(在Scala只是java.lang.String,至少在定位Java / JVM平台时)没有定义关系运算符>。但是,您可以轻松地将<:替换为<%来指定所谓的视图绑定,这意味着A <% B AB的子类型,或者在范围内存在隐式转换,在给定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]