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; 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); }