खोज…


वाक्य - विन्यास

  • :प्रतीक
  • :'प्रतीक'
  • :"प्रतीक"
  • "प्रतीक" .to_sym
  • % S {} प्रतीक

टिप्पणियों

तार पर प्रतीकों का उपयोग करने के लाभ:

1. रूबी प्रतीक O (1) तुलना के साथ एक वस्तु है

दो तारों की तुलना करने के लिए, हमें संभावित रूप से हर चरित्र को देखना होगा। लंबाई एन के दो तारों के लिए, इसके लिए एन + 1 तुलना की आवश्यकता होगी

def string_compare str1, str2
  if str1.length != str2.length
        return false
  end
  for i in 0...str1.length
    return false if str1[i] != str2[i]
  end
  return true
end
string_compare "foobar", "foobar"

लेकिन चूंकि प्रत्येक उपस्थिति: फ़ोबोबर एक ही ऑब्जेक्ट को संदर्भित करता है, हम ऑब्जेक्ट आईडी को देखकर प्रतीकों की तुलना कर सकते हैं। हम एक ही तुलना के साथ ऐसा कर सकते हैं। (O (1))

def symbol_compare sym1, sym2
  sym1.object_id == sym2.object_id
end
symbol_compare :foobar, :foobar

2. एक रूबी प्रतीक एक फ्री-फॉर्म एन्यूमरेशन में एक लेबल है

C ++ में, हम संबंधित स्थिरांक के परिवारों का प्रतिनिधित्व करने के लिए "गणना" का उपयोग कर सकते हैं:

enum BugStatus { OPEN, CLOSED };
BugStatus original_status = OPEN;
BugStatus current_status  = CLOSED;

लेकिन क्योंकि रूबी एक गतिशील भाषा है, इसलिए हम बगस्टैटस प्रकार की घोषणा करने या कानूनी मूल्यों का ध्यान रखने के बारे में चिंता नहीं करते हैं। इसके बजाय, हम प्रतीक के रूप में गणना मूल्यों का प्रतिनिधित्व करते हैं:

original_status = :open
current_status  = :closed

3. एक रूबी प्रतीक एक निरंतर, अद्वितीय नाम है

रूबी में, हम एक स्ट्रिंग की सामग्री को बदल सकते हैं:

"foobar"[0] = ?b # "boo"

लेकिन हम एक प्रतीक की सामग्री को बदल नहीं सकते हैं:

:foobar[0]  = ?b # Raises an error

4. एक रूबी प्रतीक एक कीवर्ड तर्क के लिए कीवर्ड है

रूबी फ़ंक्शन पर कीवर्ड तर्क पास करते समय, हम प्रतीकों का उपयोग करके कीवर्ड निर्दिष्ट करते हैं:

# Build a URL for 'bug' using Rails.
url_for :controller => 'bug',
        :action => 'show',
        :id => bug.id

5. एक रूबी प्रतीक एक हैश कुंजी के लिए एक उत्कृष्ट विकल्प है

आमतौर पर, हम हैश तालिका की कुंजियों का प्रतिनिधित्व करने के लिए प्रतीकों का उपयोग करेंगे:

options = {}
options[:auto_save]     = true
options[:show_comments] = false

प्रतीक बनाना

एक उपनिवेश के साथ स्ट्रिंग पहचानकर्ता को उपसर्ग करके एक Symbol वस्तु बनाने का सबसे आम तरीका है:

:a_symbol       # => :a_symbol
:a_symbol.class # => Symbol

एक String शाब्दिक के साथ संयोजन में, Symbol को परिभाषित करने के कुछ वैकल्पिक तरीके यहां दिए गए हैं:

:"a_symbol"
"a_symbol".to_sym

प्रतीकों में एक %s अनुक्रम भी होता है जो मनमानी परिसीमन का समर्थन करता है कि कैसे %q और %Q स्ट्रिंग्स के लिए काम करते हैं:

%s(a_symbol)
%s{a_symbol}

सफेद स्थान वाले इनपुट से प्रतीक बनाने के लिए %s विशेष रूप से उपयोगी है:

%s{a symbol} # => :"a symbol"

हालांकि कुछ दिलचस्प प्रतीकों ( :/ :[] :^ , आदि) को कुछ स्ट्रिंग पहचानकर्ताओं के साथ बनाया जा सकता है, ध्यान दें कि प्रतीकों को एक संख्यात्मक पहचानकर्ता का उपयोग करके नहीं बनाया जा सकता है:

:1 # => syntax error, unexpected tINTEGER, ...
:0.3 # => syntax error, unexpected tFLOAT, ...

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

:hello?  # :"hello?" is not necessary.
:world!  # :"world!" is not necessary.

ध्यान दें कि प्रतीक बनाने के इन सभी अलग-अलग तरीकों से एक ही वस्तु वापस आ जाएगी:

:symbol.object_id == "symbol".to_sym.object_id
:symbol.object_id == %s{symbol}.object_id

रूबी 2.0 के बाद से शब्दों से प्रतीकों की एक सरणी बनाने के लिए एक शॉर्टकट है:

%i(numerator denominator) == [:numerator, :denominator]

एक स्ट्रिंग को प्रतीक के रूप में परिवर्तित करना

दिए गए String :

s = "something"

इसे Symbol बदलने के कई तरीके हैं:

s.to_sym
# => :something
:"#{s}"
# => :something

स्ट्रिंग के लिए एक प्रतीक परिवर्तित

एक Symbol :

s = :something

इसे String Symbol#to_s बदलने के लिए सबसे सरल तरीका है Symbol#to_s विधि का उपयोग करके:

s.to_s
# => "something"

एक अन्य तरीका यह करने के लिए उपयोग करना है Symbol#id2name विधि के लिए एक उपनाम है Symbol#to_s विधि। लेकिन यह एक ऐसी विधि है जो Symbol वर्ग के लिए अद्वितीय है:

s.id2name
# => "something"


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow