型メンバーが相互に参照できるようにする方法があるかどうか疑問に思っていました。以下のようなプログラムを書きたいと思います。
type IDieRoller =
abstract RollDn : int -> int
abstract RollD6 : int
abstract RollD66 : int
type DieRoller() =
let randomizer = new Random()
interface IDieRoller with
member this.RollDn max = randomizer.Next(max)
member this.RollD6 = randomizer.Next(6)
member this.RollD66 = (RollD6 * 10) + RollD6
しかし、this.RollD66 は this.RollD6 を見ることができません。理由はなんとなくわかりますが、ほとんどの関数型言語には、関数に事前に存在することを知らせる方法があり、この構文または類似の構文が可能になっているようです。
代わりに、次のコードを実行する必要がありましたが、特にそのようなケースが多い場合は、前者の方が後者よりもエレガントに見えるようです。
type DieRoller() =
let randomizer = new Random()
let rollD6 = randomizer.Next(6)
interface IDieRoller with
member this.RollDn max = randomizer.Next(max)
member this.RollD6 = rollD6
member this.RollD66 = (rollD6 * 10) + rollD6
任意のヒント?ありがとう!