Ich habe mich gefragt, ob es eine Möglichkeit gibt, dass sich Typenmitglieder gegenseitig referenzieren. Ich würde gerne das folgende Programm wie folgt schreiben:
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
Aber this.RollD66 ist nicht in der Lage, this.RollD6 zu sehen. Ich kann irgendwie verstehen, warum, aber es scheint, dass die meisten funktionalen Sprachen eine Möglichkeit haben, Funktionen im Voraus wissen zu lassen, dass sie existieren, so dass diese oder eine ähnliche Syntax möglich ist.
Stattdessen musste ich das Folgende tun, was nicht viel mehr Code ist, aber es scheint, dass Ersteres eleganter aussehen würde als Letzteres, besonders wenn es mehr Fälle wie diesen gibt.
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
Irgendwelche Tipps? Danke!