सिंबल ऐसे नाम वाले आइडेंटिफायर होते हैं जिनका इस्तेमाल किसी वैल्यू को संदर्भित करने के लिए किया जा सकता है।
सिंबल, सिंबल लिटरल से बनते हैं। इसके लिए नाम के आगे : अक्षर लगाया जाता है, जैसे :foo।
इन्हें कोट्स के साथ भी लिखा जा सकता है, जैसे :"foo"। इससे नाम में स्पेस जैसी चीज़ें भी रखी जा सकती हैं।
:foo # => :foo
:"foo boo" # => :"foo boo"
भाषा में सिंबल कई जगहों पर इस्तेमाल होते हैं, जैसे हैश में की के रूप में, और मेथड तथा वेरिएबल के नाम दर्शाने के लिए।
सिंबल स्ट्रिंग से इसलिए अलग होते हैं कि वे आइडेंटिफायर हैं और किसी डेटा या टेक्स्ट को नहीं दर्शाते। इसका अर्थ है कि एक ही नाम वाले दो सिंबल हमेशा एक ही ऑब्जेक्ट होते हैं।
"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748
सिंबल अपरिवर्तनीय होते हैं, यानी उन्हें बदला नहीं जा सकता। इसका अर्थ है कि जब आप किसी सिंबल को "बदलते" हैं, तो वास्तव में एक नया सिंबल बनाते हैं। सिंबल पर काम करने के लिए कुछ मेथड उपलब्ध हैं, और ये सभी नए सिंबल लौटाते हैं। सभी मेथड Symbol API में देखे जा सकते हैं।
:foo.upcase # => :FOO
:foo.object_id # => 1086748
:foo.upcase.object_id # => 60
सिंबल के अपरिवर्तनीय होने का फायदा यह है कि वे स्ट्रिंग से कम मेमोरी लेते हैं। साथ ही, आइडेंटिफायर के रूप में इनका इस्तेमाल करना ज़्यादा सुरक्षित भी होता है।
सिंबल को स्ट्रिंग में बदला जा सकता है, और स्ट्रिंग को सिंबल में।
यह तब काम आ सकता है जब आप किसी सिंबल को बदलना चाहते हों, या किसी सिंबल को स्ट्रिंग की तरह इस्तेमाल करना चाहते हों।
किसी स्ट्रिंग को सिंबल के रूप में लाने के लिए आप String#to_sym मेथड का इस्तेमाल कर सकते हैं, और इसका उल्टा करने के लिए Symbol#to_s मेथड का।
सिंबल पर उपलब्ध मेथड सीमित हैं, इसलिए अगर कोई नया सिंबल बनाना हो, तो सिंबल को स्ट्रिंग में बदलकर उस पर स्ट्रिंग के मेथड इस्तेमाल करना काम आ सकता है।
:foo.to_s # => "foo"
"foo".to_sym # => :foo
Ruby में आप अलग-अलग मेथड की मदद से स्कोप में मौजूद नाम पा सकते हैं, जैसे स्थिरांक, मेथड और वेरिएबल के नाम। ये मेथड सिंबल के ऐरे लौटाते हैं।
ऐसे कुछ मेथड हैं Module#constants, Module#instance_methods, Module#class_variables, global_variables और local_variables।
module Foo
BAR = 1
def self.baz; end
end
a = 1
Foo.constants # => [:BAR]
Foo.instance_methods # => [:baz]
local_variables # => [:a]
सभी मेथड Kernel API और Module API में देखे जा सकते हैं।