He revisado mis libros y he buscado en Google hasta que me he quedado sin términos de búsqueda, pero todavía no encuentro un ejemplo o respuesta a este problema:¿Cómo se resuelven los errores de referencia tipo F #?
El siguiente código no se compila porque el tipo Efecto y el tipo Afecto no se han declarado en el momento en que se declara Entidad. Entonces, lo que no entiendo es cómo solucionar esto.
En C++, este problema se resuelve a través de una declaración de prototipo en h archivos y luego incluye el archivo h. En C# nunca es un problema. Entonces, ¿cómo se resuelve en F #?
#light
type Entity =
{
Name:string;
Affects:List<Affect>; //Compile error: The type Affect is not defined
Effects:List<Effect>; //Compile error: the type Effect is not defined
}
type Effect =
{
Name:string;
//A function pointer for a method that takes an Entity and returns an Entity
ApplyEffect:Entity -> Entity;
}
type Affect =
{
Name:string;
//A List of Effects that are applied by this Affect Object
EffectList:List<Effect>;
//A function pointer to return an Entity modified by the listed Effects
ApplyAffect:Entity->Entity;
}
El objetivo subyacente aquí es que un objeto del tipo de entidad debe ser capaz de enumerar los afectos se puede aplicar a objetos de tipo de entidad. La entidad también puede enumerar los Efectos que se le han aplicado. De esta forma, el estado "actual" de una entidad se encuentra plegando todos los Efectos contra el estado de la entidad original.
Gracias por su tiempo,
--Adam Lenda
Ver también http://stackoverflow.com/questions/680606/f-how-to-have-two-methods-calling-each-other wh Ich muestra cómo definir funciones mutuamente recursivas, así como tipos mutuamente recursivos. – Brian