Một câu hỏi khác liên quan đến tính năng F # được gọi là "Type extensions".Mở rộng các kiểu liệt kê trong F #
Dường như không thể mở rộng liệt kê trong F #. Tôi sử dụng C# Extensions Methods rất nhiều cho việc mở rộng enums: thêm logic xác nhận phạm vi, phương thức trả về chuỗi đại diện, vv
Đáng tiếc là có vẻ như có thể mở rộng liên minh chỉ bị kỳ thị nhưng không thể mở rộng enumerations đơn giản:
1. Intrinsic mở rộng
// CustomEnum.fs
module CustomEnumModule
type CustomEnum =
| Value1 = 1
| Value2 = 2
// Trying to split definition of the enum
type CustomEnum with
| Value3 = 3
lỗi: "lỗi FS0010: biểu tượng bất ngờ '|' trong định nghĩa thành viên"
2. mở rộng Tùy chọn
// CustomEnumEx.fs
open CustomEnumModule
type CustomEnum with
member public x.PrintValue() =
printfn "%A" x
Lỗi: "lỗi FS0896: Enumerations không thể có các thành viên"
Nó có vẻ lạ đối với tôi bởi vì (1) chúng ta có thể coi các liệt kê đơn giản là trường hợp đặc biệt của nghiệp đoàn phân biệt đầy đủ tính năng và chúng tôi có thể mở rộng các công đoàn bị phân biệt đối xử và (2) mở rộng .NET enums là một cách hay để thêm một số tính năng (inclu ding tính năng FP) cho cơ sở hạ tầng hiện có.
Hành vi này có chủ ý hay đây là lỗi đơn giản khi triển khai?
P.S. Thật không may F# Spec là im lặng trong vấn đề này, hoặc ít nhất tôi không thể tìm thấy bất kỳ bằng chứng cho một hoặc hành vi khác ở đó.
Có một câu hỏi tương tự trên Hubfs (aka FPish) một khi trở lại: [phương pháp mở rộng trên Enum không được phép?] (http://cs.hubfs.net/topic/None/59784) cho thấy rằng nó là không thể và được thiết kế –
Cảm ơn bạn đã liên kết. Và tôi đồng ý rằng điều này ** có thể là do thiết kế **. Tôi không thể hiểu được lý do đằng sau quyết định này. –