4 Stimmen

Können sich F#-Typmitglieder gegenseitig referenzieren?

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!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X