Tôi đã xem xong sách của mình và tôi đã googled cho đến khi tôi hết các cụm từ tìm kiếm, nhưng tôi vẫn không thể tìm thấy ví dụ hoặc câu trả lời cho vấn đề này:Làm cách nào để giải quyết lỗi tham chiếu loại F #?
Mã sau không biên dịch vì kiểu Effect và kiểu Affect chưa được khai báo tại thời điểm Entity được khai báo. Vì vậy, những gì tôi không hiểu là làm thế nào để làm việc xung quanh điều này.
Trong C++, sự cố này được giải quyết thông qua khai báo mẫu trong tệp h và sau đó bao gồm tệp h. Trong C# nó không bao giờ là một vấn đề. Vậy làm thế nào nó được giải quyết trong 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;
}
Mục tiêu cơ bản ở đây là một đối tượng thuộc loại Thực thể có thể liệt kê Ảnh hưởng có thể áp dụng cho đối tượng thuộc đối tượng loại. Thực thể cũng có thể liệt kê các Hiệu ứng đã được áp dụng cho nó. Bằng cách này, trạng thái "hiện tại" của một thực thể được tìm thấy bằng cách gấp tất cả các hiệu ứng đối với trạng thái thực thể ban đầu.
Cảm ơn bạn đã dành thời gian,
--Adam Lenda
Xem cũng http://stackoverflow.com/questions/680606/f-how-to-have-two-methods-calling-each-other wh ich cho thấy cách xác định các hàm đệ quy lẫn nhau cũng như các kiểu đệ quy lẫn nhau. – Brian