F # hồ sơ không thể được thừa hưởng - như Matthew đề cập đến, họ được biên soạn để các lớp niêm phong, nhưng nó cũng là một khía cạnh của hệ thống kiểu F # mà đơn giản là không cho phép điều này.
Trong thực tế, bạn có thể đi kèm với tuyên bố lớp học thông thường. Điều này có nghĩa rằng bạn sẽ không thể sử dụng cú pháp { person with ... }
và bạn sẽ không nhận được sự bình đẳng về cơ cấu tự động, nhưng nó có thể có ý nghĩa nếu bạn muốn tạo mã C# -friendly:
type Person(name:string) =
member x.Name = name
type Employee(name:string, id:int) =
inherit Person(name)
member x.ID = id
Tôi nghĩ rằng lựa chọn ưa thích sẽ được sử dụng phần hơn thừa kế và làm cho người lao động một kỷ lục mà bao gồm một số thông tin cá nhân và ID:
type PersonalInformation = { Name : string }
type Employee =
{ Person : PersonalInformation
ID : int }
tôi có lẽ sẽ không làm cho một người một mệnh t của nhân viên (điều đó không cảm thấy đúng đối với tôi, nhưng đó chỉ là trực giác), đó là lý do tại sao tôi đổi tên thành PersonalInformation
tại đây.
Tôi cho rằng tùy chọn khác sẽ có IPerson
như một giao diện và có một kỷ lụcEmployee
thực hiện giao diện:
type IPerson =
abstract Name : string
type Employee =
{ ID : int
Name : string }
interface IPerson with
member x.Name = x.Name
Cái nào là tốt nhất thực sự phụ thuộc vào các điều cụ thể mà bạn đang xây dựng mô hình . Nhưng tôi nghĩ giao diện và bố cục thường được ưu tiên trong F # :-)
Nguồn
2014-12-02 15:31:24
Offtopic nhưng không cho phép nhân viên kế thừa người :-) –
Tôi có quyền này ngay bây giờ: employee {person: Person; vv ..} là thích hợp theo Tomas P. Tôi chỉ nhìn thấy cách khác để làm điều đó. :-) –