Khi phát triển ứng dụng F #, tôi có loại bao gồm thuộc tính loại Lazy<'T>
. Rõ ràng, một hiệu ứng phụ thú vị (Pardon the pun) của cách F # xử lý đường cú pháp của các thuộc tính (trái ngược với cách C#) là getter và setter của một thuộc tính có thể trả về/chấp nhận khác nhau loại. (. Ít nhất, Visual Studio không hề phàn nàn khi tôi viết mã để tận dụng những quan sát này)Thuộc tính F # so với thuộc tính C#
Ví dụ, đó là thuận lợi cho tôi để làm điều này:
let lazyValue = lazy 0
member this.Value
with get() =
lazyValue.Value
and set _lazyVal =
lazyValue <- _lazyVal
... như vậy mà giá trị gia tăng trả lại an int
, nhưng chỉ chấp nhận chỉ một Lazy<int>
.
Điều tôi đang phân vân là những sự phản đối lý thuyết, thành ngữ và thực tiễn để làm những việc theo cách này. Đây có phải là thứ mà F # snob sẽ bật mũi lên không? Có một số quy tắc lập trình chức năng của ngón tay cái rằng điều này (thực hiện hướng đối tượng) rõ ràng vi phạm? Đây có phải là một cách tiếp cận đã được chứng minh là gây ra các vấn đề trong các ứng dụng quy mô lớn không? Nếu vậy, tại sao/như thế nào?
Điều này được cho phép là một lỗi trong trình biên dịch F # - F # spec nói rằng đó là bất hợp pháp. Mong đợi điều này không còn hoạt động trong các phiên bản F # trong tương lai nữa. : -] – ildjarn