परिवर्तित होने पर संपत्ति सेट करें मेरे पास ऐसे गुण हैं जिनके सेटर्स को बुलाया जाता है, जैसे परिवर्तनों को निकाल दिया जाता है और/या प्रतिपादन क्रियाएं बदलती हैं। मैं एक फ़ंक्शन कैसे डिज़ाइन कर सकता हूं जो केवल संपत्ति को सेट करेगा यदि उसके मूल्य को बदलने की आवश्यकता है?एफ # -
refs के साथ, मैं तो बस कुछ इस तरह करना होगा:
let setIfChanged (oldVal: Ref<'T>) (newVal: 'T) = if newVal <> !oldVal then oldVal := newVal
let y = ref 0
setIfChanged y 1
हालांकि, परिवर्तनशील गुण refs नहीं हैं, और मैं इस तरह के एक बात यह है कि संकलन होगा डिजाइन करने के लिए किसी भी तरह से खोजने के लिए प्रतीत नहीं कर सकते हैं। उदाहरण के लिए,
let setIfChanged oldVal newVal = if newVal <> oldVal then oldVal <- newVal
बस मुझे बताएगा कि पुराना वैल व्यवहार्य नहीं है।
क्या पुरानी वैल को एनोटेट करने का कोई तरीका है ताकि यह उत्परिवर्तनीय (सेटटेबल) गुणों के लिए हो? या कोई बेहतर तरीका है?
अच्छी तरह से यह एक शर्म की बात है (आमतौर पर आप चाहते हैं कि सेटर कुछ साइड-इफेक्ट्स नहीं होने पर साइड इफेक्ट्स न करें) आप स्रोत को नहीं बदल सकते - व्यक्तिगत रूप से मैं * अपमानजनक * प्रकारों को लपेटने पर विचार करता हूं - टॉमस उत्तर ऐसा करने का एक अच्छा तरीका लगता है * शॉर्टिश * – Carsten