एक गो घोषणा में "_," (अंडरस्कोर अल्पविराम) क्या है?


100

और मैं इस तरह की परिवर्तनशील घोषणा को नहीं समझ सकता:

_, prs := m["example"]

क्या वास्तव में " _," कर रहा है और क्यों उन्होंने इसके बजाय इस तरह एक चर घोषित किया है

prs := m["example"]

(मैंने इसे उदाहरण के रूप में गो के भाग के रूप में पाया : मानचित्र )


3
भविष्य के भाषा के सवालों के लिए, कृपया पहले कल्पना पर एक नज़र डालें । इसे आपके सभी सवालों का जवाब देना चाहिए।
12

एक टिप्पणी के रूप में: prsशायद "वर्तमान" के लिए खड़ा है। अपने उदाहरण में कोड उपस्थिति या के लिए एक प्रवेश के अभाव के लिए जाँच कर रहा है "example"में mनक्शा।

6
@FUZxxl हां, मुझे वहां पहले से एक नजर थी, लेकिन जैसा कि मुझे फीचर का नाम नहीं पता था, मुझे यह नहीं मिला। इसके अलावा, मैं प्रोग्रामिंग भाषाओं के लिए आधिकारिक चश्मा बहुत ही शैक्षणिक नहीं है और उदाहरण के लिए सीखते हैं।
कांसुलर

@dyoo एक बार जब मैंने नीचे स्पष्टीकरण दिया था तो मुझे लगा कि यह अर्थ है, लेकिन ध्यान देने योग्य है कि क्या किसी और का भी यही प्रश्न है!
कांसुलर

8
@FUZxxl: मुझे नहीं पता। SO पर पूछे गए अधिकांश प्रश्नों के उत्तर शायद कहीं उपलब्ध हैं कुछ दहलीज मौजूद हैं, जिनके नीचे एक सवाल शायद नहीं पूछा जाना चाहिए, लेकिन मुझे नहीं लगता कि यह सवाल उसके नीचे आता है।
THB

जवाबों:


120

यह रिटर्न मानों के लिए सभी चर घोषित करने से बचता है।
इसे रिक्त पहचानकर्ता कहा जाता है ।

जैसे की:

_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

( अन्य ' _' उपयोग मामला आयात के लिए है )

चूंकि यह रिटर्न वैल्यू को डिस्क्राइब करता है, इसलिए यह तभी उपयोगी होता है, जब आप केवल दिए गए मानों में से किसी एक को चेक करना चाहते हैं, जैसे कि " मैप में मुख्य अस्तित्व का परीक्षण कैसे करें? " " प्रभावी गो, मैप " में दिखाया गया है :

_, present := timeZone[tz]

वास्तविक मूल्य के बारे में चिंता किए बिना मानचित्र में उपस्थिति के लिए परीक्षण करने के लिए, आप रिक्त पहचानकर्ता, एक साधारण अंडरस्कोर ( _) का उपयोग कर सकते हैं ।
रिक्त पहचानकर्ता को किसी भी प्रकार के किसी भी मूल्य के साथ सौंपा जा सकता है या घोषित किया जा सकता है, जिसमें मूल्य हानिरहित रूप से त्याग दिया गया है।
किसी मानचित्र में उपस्थिति की जाँच के लिए, मान के लिए सामान्य चर के स्थान पर रिक्त पहचानकर्ता का उपयोग करें।

जैसा कि Jsor टिप्पणियों में जोड़ता है :

"आम तौर पर स्वीकृत मानक" सदस्यता परीक्षण चर "ओके" को कॉल करना है (यह जांचने के लिए कि क्या चैनल पढ़ा गया था या नहीं)

यह आपको इसे परीक्षण के साथ संयोजित करने की अनुमति देता है:

if _, err := os.Stat(path); os.IsNotExist(err) {
    fmt.Printf("%s does not exist\n", path)
}

आप इसे लूप में भी पाएंगे:

यदि आपको सीमा में दूसरे आइटम (मान) की आवश्यकता है, तो पहले को त्यागने के लिए, खाली पहचानकर्ता, एक अंडरस्कोर का उपयोग करें:

sum := 0
for _, value := range array {
    sum += value
}

एक अच्छा उदाहरण देने के लिए धन्यवाद। इस अवधारणा को समझने के लिए मुझे कुछ सोच लेना पड़ा, लेकिन अब मैं करता हूँ!
कांसुलर

ध्यान दें कि आईएमई "आम तौर पर स्वीकृत मानक" सदस्यता परीक्षण चर "ओके" को कॉल करने के लिए है (यह जांचने के लिए कि क्या चैनल पढ़ा गया था या नहीं)।
लीनियरजेट्रोपे

1
@ जसर मैं सहमत हूँ। मैंने आपकी टिप्पणी को अधिक अस्पष्टता के जवाब में शामिल किया है, और कुछ अतिरिक्त उदाहरण भी जोड़े हैं।
VonC

63

गो संकलक आपको ऐसे चर बनाने की अनुमति नहीं देगा, जिनका आप कभी उपयोग नहीं करते हैं।

for i, value := range x {
   total += value
}

उपरोक्त कोड "मैं घोषित और उपयोग नहीं किया गया" एक त्रुटि संदेश लौटाएगा।

चूंकि हम अपने लूप के अंदर का उपयोग नहीं करते हैं इसलिए हमें इसे इसे बदलने की आवश्यकता है:

for _, value := range x {
   total += value
}

12
एक खाली पहचानकर्ता के रूप में _ होने का कारण समझने के लिए आपका पहला वाक्य महत्वपूर्ण था।
तारिक

4

_रिक्त पहचानकर्ता है। मतलब यह मान लिया जाना चाहिए कि इसे छोड़ दिया गया है।

यहाँ यह exampleकुंजी का मूल्य है जिसे त्याग दिया गया है। कोड की दूसरी पंक्ति उपस्थिति बूलियन को त्याग देगी और मूल्य को स्टोर करेगी prs
तो केवल नक्शे में उपस्थिति की जांच करने के लिए, आप मूल्य को त्याग सकते हैं। यह एक सेट के रूप में मानचित्र का उपयोग करने के लिए इस्तेमाल किया जा सकता है।


3

जब भी सिंटैक्स को एक चर नाम की आवश्यकता होती है, तो रिक्त पहचानकर्ता का उपयोग किया जा सकता है, लेकिन उदाहरण के लिए, अवांछित लूप इंडेक्स को छोड़ने के लिए, जब हमें केवल तत्व मान की आवश्यकता होती है।

से अंश:

गो प्रोग्रामिंग भाषा (एडिसन-वेस्ले व्यावसायिक कम्प्यूटिंग श्रृंखला)

ब्रायन डब्ल्यू कर्निघन

इस सामग्री को कॉपीराइट द्वारा संरक्षित किया जा सकता है।


2

इसे रिक्त पहचानकर्ता कहा जाता है और यह उन मामलों में मदद करता है जहां आप उस मूल्य को त्यागना चाहते हैं जो वापस होने वाला है और इसका संदर्भ नहीं है

कुछ जगह जहां हम इसका उपयोग करते हैं:

  • एक फ़ंक्शन मान लौटाता है और आप भविष्य में इसका उपयोग करने का इरादा नहीं रखते हैं
  • आप इसे पुनरावृत्त करना चाहते हैं और एक i मान की आवश्यकता है जिसका आप उपयोग नहीं कर रहे हैं

2

अप्रयुक्त चर के लिए महान उपयोग मामला वह स्थिति है जब आपको केवल आंशिक आउटपुट की आवश्यकता होती है। नीचे दिए गए उदाहरण में हमें केवल मूल्य (राज्य की आबादी) प्रिंट करने की आवश्यकता है।

package main
import (
    "fmt"
)
func main() {
          statePopulations := map[string]int{
          "California": 39250017,
          "Texas":      27862596,
          "Florida":    20612439,
          }
          for _, v := range statePopulations {
          fmt.Println(v)
    }
}

1

मूल _,रूप से, रिक्त पहचानकर्ता के रूप में जाना जाता है। GO में हमारे पास वे चर नहीं हो सकते हैं जिनका उपयोग नहीं किया जा रहा है।

एक उदाहरण के रूप में जब आप एक सरणी के माध्यम से पुनरावृत्ति करते हैं यदि आप मूल्य का उपयोग कर रहे हैं : = श्रेणी जो आप एक i नहीं चाहते हैं पुनरावृत्ति के लिए मान । लेकिन अगर आप i मान को छोड़ देते हैं तो यह एक त्रुटि लौटाएगा। लेकिन अगर आप मुझे घोषित करते हैं और इसका उपयोग नहीं करते हैं, तो यह एक त्रुटि भी लौटाएगा।

इसलिए, यह वह जगह है जहां हमें उपयोग करना है _,

साथ ही इसका उपयोग तब किया जाता है जब आप भविष्य में फ़ंक्शन का रिटर्न मान नहीं चाहते हैं।


0

गोलंग में अप्रयुक्त चर की अनुमति नहीं है

यदि आप अन्य प्रोग्रामिंग भाषाओं से आ रहे हैं, तो इसका उपयोग करना थोड़ा मुश्किल हो सकता है। लेकिन इसका परिणाम अधिक क्लीनर कोड है। इसलिए _हम कह रहे हैं कि हम जानते हैं कि वहाँ एक चर है, लेकिन हम इसका उपयोग नहीं करना चाहते हैं और संकलक को बता रहे हैं कि इससे मुझे कोई शिकायत नहीं है। :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.