範囲内の数値をラップする型をScalaで定義でき、コンパイル時にその妥当性を主張できるかどうかは疑問です。例:範囲[0,1]のすべての数値。したがって、BetweenZeroAndOne型の関数を定義できます。私は、数を保持する/ラップするケースクラスを定義することができ、実行時にその範囲内にあるかどうかをチェックし、暗黙的な変換も使用できるかどうかをチェックすることができます。しかし、ゼロと1の間の型の型を定義することは可能ですか?Scala - 範囲内の数値の型を定義する
おかげで、
範囲内の数値をラップする型をScalaで定義でき、コンパイル時にその妥当性を主張できるかどうかは疑問です。例:範囲[0,1]のすべての数値。したがって、BetweenZeroAndOne型の関数を定義できます。私は、数を保持する/ラップするケースクラスを定義することができ、実行時にその範囲内にあるかどうかをチェックし、暗黙的な変換も使用できるかどうかをチェックすることができます。しかし、ゼロと1の間の型の型を定義することは可能ですか?Scala - 範囲内の数値の型を定義する
おかげで、
が可能な解決策では、私が正しくあなたの質問を理解してほしい:
object MyInt extends Enumeration {
type MyInt = Value
// this is most "fragile" part of this solution
val Zero, One, Two, Three = Value
}
object MyIntToIntConverter{
import MyInt._
implicit def MyIntToInt(x: MyInt) : Int = x.id
implicit def IntToMyInt(x: Int) : MyInt = MyInt.apply(x)
}
import MyInt._
import MyIntToIntConverter._
val x : Int = MyInt.Three
val t : MyInt = 3
、あなたが話していた場合: は、純粋にScalaの機能で構築使用して次のようなものです:data Bool = False |真(ハスケル)。それで、私はあなたがこれをすることができないと思う。 – Pavel
@Pavel私はhaskellについてよく分かりませんが、あなたの定義はOOの階層に似ています。真はBoolを拡張し、FalseはBoolを拡張します。私は絶え間ない価値観を求めています。 – vicaba
あなたはどのくらいの大きさですか? – Pavel