मैं एक गो फ़ंक्शन लिख रहा हूं जो कि पाइथन के itertools.permutations()
की नकल करता है, लेकिन एक समय में एक को उपज करने के बजाय सभी क्रमिकताएं लौटाता है।गोलांग - अप्रत्याशित बहु-असाइनमेंट व्यवहार
मैं अनपेक्षित व्यवहार देख रहा हूँ जब कोड की निम्न पंक्तियों में एक ही समय में 2 चर को अद्यतन करने:
setcopy := append([]int(nil), sorted...)
for i := 0; i < r; i++ {
c := counters[r-1-i]
current[i], setcopy = setcopy[c], append(setcopy[:c], setcopy[c+1:]...)
}
मैं सही परिणाम प्राप्त जब ऊपर अद्यतन decoupling:
current[i] = setcopy[c]
setcopy = append(setcopy[:c], setcopy[c+1:]...)
मैं मुख्य रूप से SliceTricks विकी आलेख से Pop
और Delete
उदाहरणों से प्रेरित था। क्या इसके बीच कोई महत्वपूर्ण अंतर है और मैं क्या करने की कोशिश कर रहा हूं?
यदि आप पूर्ण कोड (दोषपूर्ण आउटपुट का उदाहरण और डीबगिंग के लिए कुछ प्रिंट स्टेटमेंट्स सहित) देखना चाहते हैं, तो आप this Gist देख सकते हैं।
मुझे ऐसा नहीं लगता है, क्योंकि असाइनमेंट में उपयोग किए गए 'एपेंड' वास्तव में स्लाइस के आकार को कम करने/तत्व को हटाने (और इस तरह, एक नया अंतर्निहित सरणी आवश्यक नहीं होगा)। – Redy
क्यों समझा नहीं सकता है, लेकिन आउटपुट वही है जैसे 'एपेंड' पहले चलता है: http://play.golang.org/p/ZQ-4cMyNTJ – twotwotwo
ऐसा लगता है कि आपको बाएं से टू- सही eval आदेश - अगर कोई भी यहाँ एक अच्छे कारण के साथ आता है, मैं इस के साथ गोलंग-नट मारा होगा, वास्तव में अजीब लगता है। – twotwotwo