Tôi có một lớp với các thuộc tính có nhiều tác dụng phụ kích hoạt khi các trình định vị của nó được gọi, chẳng hạn như thay đổi các sự kiện được kích hoạt và/hoặc các hành động hiển thị. Làm thế nào tôi có thể thiết kế một chức năng mà sẽ thiết lập các tài sản chỉ khi giá trị của nó cần phải thay đổi?F # - Đặt thuộc tính nếu đã thay đổi
Với refs, tôi sẽ chỉ làm điều gì đó như thế này:
let setIfChanged (oldVal: Ref<'T>) (newVal: 'T) = if newVal <> !oldVal then oldVal := newVal
let y = ref 0
setIfChanged y 1
Tuy nhiên, tài sản có thể thay đổi không refs, và tôi dường như không thể tìm thấy bất cứ cách nào để thiết kế một điều như vậy mà sẽ biên dịch. Ví dụ:
let setIfChanged oldVal newVal = if newVal <> oldVal then oldVal <- newVal
sẽ chỉ cho tôi biết rằng oldVal không thể thay đổi được.
Có cách nào để chú thích oldVal sao cho nó dành cho các thuộc tính có thể thay đổi (có thể đặt)? đây có phải là cách tốt hơn không?
cũng thật xấu hổ (thông thường bạn sẽ muốn setter được thông minh để không làm tác dụng phụ khi không có gì thay đổi) bạn không thể thay đổi nguồn - cá nhân tôi sẽ xem xét gói * vi phạm * loại - câu trả lời Tomas có vẻ là một cách hay để làm điều này * shortish * – Carsten