Ruby Language
प्रतीक
खोज…
वाक्य - विन्यास
- :प्रतीक
- :'प्रतीक'
- :"प्रतीक"
- "प्रतीक" .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"