Мне было интересно, есть ли способ позволить членам типа ссылаться друг на друга. Я хотел бы написать следующую программу, как это:
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 не может увидеть это. Я могу понять почему, но кажется, что большинство функциональных языков имеют способ сообщить функциям, что они существуют заранее, так что возможен тот или иной синтаксис.
Вместо этого мне пришлось сделать следующее, что не намного больше кода, но кажется, что первое будет выглядеть более элегантно, чем второе, особенно если таких случаев больше.
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
Есть советы? Спасибо!