गो में, समानता के परीक्षण के लिए दो गैर-शून्य फ़ंक्शन पॉइंटर्स की तुलना करने का कोई तरीका है? समानता का मेरा मानक सूचक समानता है। यदि नहीं, तो क्या कोई विशेष कारण है कि पॉइंटर समानता की अनुमति नहीं है?नवीनतम गो साप्ताहिक में पॉइंटर समानता के लिए मैं दो कार्यों की तुलना कैसे करूं?
फिलहाल, अगर मैं सीधी-सपाट रास्ते में यह करने के लिए प्रयास करते हैं:
package main
import "fmt"
func SomeFun() {
}
func main() {
fmt.Println(SomeFun == SomeFun)
}
मैं
./func-pointers.go:12: invalid operation: SomeFun == SomeFun (func can only be compared to nil)
यह मेरी समझ है कि इस व्यवहार हाल ही में शुरू किया गया था।
मुझे प्रतिबिंबित पैकेज का उपयोग करके एक जवाब मिला है; हालांकि एटम नीचे बताता है कि यह वास्तव में अपरिभाषित व्यवहार पैदा करता है। अधिक जानकारी और संभावित वैकल्पिक समाधान के लिए एटम की पोस्ट देखें।
package main
import "fmt"
import "reflect"
func SomeFun() { }
func AnotherFun() { }
func main() {
sf1 := reflect.ValueOf(SomeFun)
sf2 := reflect.ValueOf(SomeFun)
fmt.Println(sf1.Pointer() == sf2.Pointer())
af1 := reflect.ValueOf(AnotherFun)
fmt.Println(sf1.Pointer() == af1.Pointer())
}
आउटपुट:
true
false
उत्कृष्ट प्रतिक्रिया। धन्यवाद! आपको निश्चित रूप से "क्यों" का जवाब देने के लिए क्रेडिट मिलता है, लेकिन मैं अपने मूल प्रश्न के उत्तर के बारे में उलझन में हूं। ऐसा प्रतीत होता है कि यह F1 और F2 कार्यों की पहचान के बजाय चर F1_ID और F2_ID की पहचान का परीक्षण कर रहा है। उदाहरण के लिए, यदि मेरे पास 'var F1_ID2 = F1' था, तो यदि हम फ़ंक्शन पहचान का परीक्षण कर रहे थे तो F1_ID == और F1_ID2 सत्य वापस आ जाएंगे; लेकिन यह झूठी वापसी करता है। – BurntSushi5
इसके अलावा, प्रतिबिंबित करने के माध्यम से मेरे दृष्टिकोण की आपकी आलोचना मुझे चिंतित करती है। क्या आप सुझाव नहीं दे रहे हैं कि परीक्षण कार्य पहचान पहचान में गारंटी देना असंभव है? – BurntSushi5
टिप्पणी 1: अंतिम कोड स्निपेट में धारणा यह है कि एक विशेष फ़ंक्शन में एक आईडी होती है। –