以下をScalaで書きたいと思います。
def method(a: Float, b: Float, c: Float) = {
if( a < b <= c) {
...
}
}
現在、これは有効ではありません。確かにa < b
、ブール値を返します。これは、比較のために でラップされていbooleanWrapper
ます。Float
コンパイラは、 c の型が ではなく であると不平を言う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 を削除する方法はありますか?