Nim で型クラスを簡単に使用しようとしています。私は今朝から Nim しか使っていないので、ばかげたことをしている可能性があることを覚えておいてください。
とにかく、 type の値のストリームを生成する疑似乱数ジェネレーターを定義したいと思いますT
。時にはT
数値であるため、達成可能な最小値と最大値について何かを知ることは理にかなっています-たとえば、値を再スケーリングします。ここに私のタイプがあります
type
Generator*[T] = generic x
next(var x) is T
BoundedGenerator*[T] = generic x
x is Generator[T]
min(x) is T
max(x) is T
私もそのような例を持っていますLinearCongruentialGenerator
。
Uniform
これを使用して、間隔で float 値を生成するジェネレーターを定義するとします。私が試してみました
type Uniform* = object
gen: BoundedGenerator[int]
min_p: float
max_p: float
proc create*(gen: BoundedGenerator[int], min: float, max: float): Uniform =
return Uniform(gen: gen, min_p: min, max_p: max)
next
、min
およびの明白な定義は省略しmax
ます。
ただし、上記はコンパイルされません。Error: 'BoundedGenerator' is not a concrete type
LinearCongruentialGenerator
の代わりに明示的に配置するとBoundedGenerator[int]
、everyting がコンパイルされますが、もちろん、より洗練されたジェネレーターを切り替えられるようにしたいと考えています。
コンパイラエラーを理解するのを手伝ってくれる人はいますか?