Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more
Symbol
objects represent names and some strings inside the
Ruby interpreter. They are generated using the :name
and
:"string"
literals syntax, and by the various
to_sym
methods. The same Symbol
object will be
created for a given name or string for the duration of a program's
execution, regardless of the context or meaning of that name. Thus if
Fred
is a constant in one context, a method in another, and a
class in a third, the Symbol
:Fred
will be the
same object in all three contexts.
module One class Fred end $f1 = :Fred end module Two Fred = 1 $f2 = :Fred end def Fred() end $f3 = :Fred $f1.id #=> 2514190 $f2.id #=> 2514190 $f3.id #=> 2514190
Returns an array of all the symbols currently in Ruby's symbol table.
Symbol.all_symbols.size #=> 903 Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, :chown, :EOFError, :$;, :String, :LOCK_SH, :"setuid?", :$<, :default_proc, :compact, :extend, :Tms, :getwd, :$=, :ThreadGroup, :wait2, :$>]
VALUE rb_sym_all_symbols() { VALUE ary = rb_ary_new2(sym_tbl->num_entries); st_foreach(sym_tbl, symbols_i, ary); return ary; }
Equality—At the Object
level, ==
returns
true
only if obj and other are the same
object. Typically, this method is overridden in descendent classes to
provide class-specific meaning.
Unlike ==
, the equal?
method should never be
overridden by subclasses: it is used to determine object identity (that is,
a.equal?(b)
iff a
is the same object as
b
).
The eql?
method returns true
if obj and
anObject have the same value. Used by Hash
to test
members for equality. For objects of class Object
,
eql?
is synonymous with ==
. Subclasses normally
continue this tradition, but there are exceptions. Numeric
types, for example, perform type conversion across ==
, but not
across eql?
, so:
1 == 1.0 #=> true 1.eql? 1.0 #=> false
static VALUE rb_obj_equal(obj1, obj2) VALUE obj1, obj2; { if (obj1 == obj2) return Qtrue; return Qfalse; }
Returns the name or string corresponding to sym.
:fred.id2name #=> "fred"
static VALUE sym_to_s(sym) VALUE sym; { return rb_str_new2(rb_id2name(SYM2ID(sym))); }
Returns the representation of sym as a symbol literal.
:fred.inspect #=> ":fred"
static VALUE sym_inspect(sym) VALUE sym; { VALUE str; const char *name; ID id = SYM2ID(sym); name = rb_id2name(id); str = rb_str_new(0, strlen(name)+1); RSTRING(str)->ptr[0] = ':'; strcpy(RSTRING(str)->ptr+1, name); if (!rb_symname_p(name)) { str = rb_str_dump(str); strncpy(RSTRING(str)->ptr, ":\"", 2); } return str; }
Returns an integer that is unique for each symbol within a particular execution of a program.
:fred.to_i #=> 9809 "fred".to_sym.to_i #=> 9809
static VALUE sym_to_i(sym) VALUE sym; { ID id = SYM2ID(sym); return LONG2FIX(id); }
Returns a Proc object which respond to the given method by sym.
(1..3).collect(&:to_s) #=> ["1", "2", "3"]
static VALUE sym_to_proc(VALUE sym) { return rb_proc_new(sym_call, (VALUE)SYM2ID(sym)); }