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