F # phân biệt đối xử tương ứng với phân cấp lớp OO khá chặt chẽ, vì vậy đây có lẽ là lựa chọn tốt nhất. Sự khác biệt đáng chú ý nhất là bạn không thể thêm các trường hợp mới vào một công đoàn bị phân biệt đối xử mà không sửa đổi khai báo kiểu. Mặt khác, bạn có thể dễ dàng thêm các hàm mới hoạt động với kiểu (tương đương với việc thêm các phương thức ảo mới trong C#).
Vì vậy, nếu bạn không muốn thêm các lớp mới được thừa hưởng (trường hợp), thì đây là tùy chọn tốt nhất. Nếu không, bạn có thể sử dụng các loại đối tượng F # (hoặc các tùy chọn khác, tùy thuộc vào kịch bản).
Một điểm nữa về mã của bạn - vì bạn không thể thêm trường hợp mới, trình biên dịch F # biết rằng các trường hợp duy nhất bạn cần là dành cho B
và C
. Kết quả là, block_3
không bao giờ có thể được thực thi, có nghĩa là bạn có thể viết chỉ:
let my_fct x =
match x with
| B -> (block_1)
| C -> (block_2)
Nguồn
2011-09-07 12:44:01
Tôi đoán là không sao. Ngoại trừ việc bạn đang bỏ lỡ; sau block_1, block_2 và block_3 –
Xin lỗi vì sự thiếu hiểu biết của tôi, nhưng có vẻ như 'block_3' không bao giờ được thực hiện trong đoạn mã F # (các kiểu dữ liệu đại số được "đóng" theo như tôi biết), vậy tại sao lại có? Ngoài ra, tôi là người duy nhất nghĩ rằng bản dịch nên sử dụng đa hình? – delnan
Bạn hoàn toàn đúng về block_3. – Hugo