সিম্বলসমূহ হলো নামযুক্ত আইডেন্টিফায়ার, যা কোনো মান বোঝাতে ব্যবহার করা যায়।
সিম্বল তৈরি হয় সিম্বল লিটারালের মাধ্যমে, অর্থাৎ নামের আগে একটি : ক্যারেক্টার বসিয়ে, যেমন :foo।
কোটেশন চিহ্ন দিয়েও এগুলো লেখা যায়, যেমন :"foo", যার ফলে নামের মধ্যে স্পেসও রাখা সম্ভব হয়।
:foo # => :foo
:"foo boo" # => :"foo boo"
ভাষার অনেক জায়গাতেই সিম্বল ব্যবহৃত হয়, যেমন হ্যাশের কী (key) হিসেবে, কিংবা মেথড ও ভ্যারিয়েবলের নাম বোঝাতে।
স্ট্রিং থেকে সিম্বলের পার্থক্য হলো এগুলো আইডেন্টিফায়ার, আর এরা কোনো ডেটা বা টেক্সট প্রকাশ করে না। এর মানে হলো একই নামের দুটি সিম্বল সবসময় একই অবজেক্ট।
"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-তে।