【发布时间】:2013-06-19 20:54:24
【问题描述】:
我想在 Scala 中编写以下代码:
def method(a: Float, b: Float, c: Float) = {
if( a < b <= c) {
...
}
}
目前,这是无效的。实际上,a < b 返回一个布尔值,为了比较,它被 booleanWrapper 包裹。然后编译器会抱怨 c 的类型是 Float 而不是 Boolean,因此它根本不会将 b 与 c 进行比较。
是否有可能使用隐式类、方法和值类来实现这一点?
目前,我只能做到以下几点:
class Less(val previous: Boolean, last: Float) {
def <=(other: Float): Less = new Less(previous && last <= other, other)
def <(other: Float): Less = new Less(previous && last < other, other)
}
implicit def f(v: Float): Less = {
new Less(true, v)
}
implicit def lessToBoolean(f: Less): Boolean = {
f.previous
}
def method(a: Float, b: Float, c: Float) = {
if( f(a) < b <= c) {
...
}
}
有什么方法可以使用标准技巧来删除这个 f 吗?
【问题讨论】:
标签: scala comparison