我想寫Scala中執行以下操作:DSL在階寫鏈的比較如A <B <= C
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中?(http://stackoverflow.com/questions/13450324/do-macros-make-naturally-chained-comparisons-possible-在-階) – senia