Class: Symbol
Overview
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
Class Method Summary collapse
-
.all_symbols ⇒ Array
Returns an array of all the symbols currently in Ruby's symbol table.
Instance Method Summary collapse
-
#=== ⇒ Object
Equality---At the
Object
level,==
returnstrue
only if obj and other are the same object. -
#id2name ⇒ Object
Returns the name or string corresponding to sym.
-
#inspect ⇒ String
Returns the representation of sym as a symbol literal.
-
#to_i ⇒ Fixnum
Returns an integer that is unique for each symbol within a particular execution of a program.
-
#to_int ⇒ Object
:nodoc:.
-
#to_s ⇒ Object
Returns the name or string corresponding to sym.
-
#to_sym ⇒ Object
In general,
to_sym
returns theSymbol
corresponding to an object.
Class Method Details
.all_symbols ⇒ Array
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, :$>]
|
# File 'object.c'
VALUE
rb_sym_all_symbols()
{
VALUE ary = rb_ary_new2(sym_tbl->num_entries);
st_foreach(sym_tbl, symbols_i, ary);
return ary;
}
|
Instance Method Details
#==(other) ⇒ Boolean #equal?(other) ⇒ Boolean #eql?(other) ⇒ Boolean
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
<i>obj</i> and <i>anObject</i> 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
|
# File 'object.c'
static VALUE
rb_obj_equal(obj1, obj2)
VALUE obj1, obj2;
{
if (obj1 == obj2) return Qtrue;
return Qfalse;
}
|
#id2name ⇒ String #to_s ⇒ String
Returns the name or string corresponding to sym.
:fred.id2name #=> "fred"
|
# File 'object.c'
static VALUE
sym_to_s(sym)
VALUE sym;
{
return rb_str_new2(rb_id2name(SYM2ID(sym)));
}
|
#inspect ⇒ String
Returns the representation of sym as a symbol literal.
:fred.inspect #=> ":fred"
|
# File 'object.c'
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);
}
|
#to_i ⇒ Fixnum
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
|
# File 'object.c'
static VALUE
sym_to_i(sym)
VALUE sym;
{
ID id = SYM2ID(sym);
return LONG2FIX(id);
}
|
#to_int ⇒ Object
:nodoc:
|
# File 'object.c'
static VALUE
sym_to_int(sym)
VALUE sym;
{
rb_warning("treating Symbol as an integer");
return sym_to_i(sym);
}
|
#id2name ⇒ String #to_s ⇒ String
Returns the name or string corresponding to sym.
:fred.id2name #=> "fred"
|
# File 'object.c'
static VALUE
sym_to_s(sym)
VALUE sym;
{
return rb_str_new2(rb_id2name(SYM2ID(sym)));
}
|
#to_sym ⇒ Object
In general, to_sym
returns the Symbol
corresponding to an object. As sym is already a symbol, self
is returned in this case.
|
# File 'object.c'
static VALUE
sym_to_sym(sym)
VALUE sym;
{
return sym;
}
|