Feature #6697 ยป 0001-Add-Kernel-Symbol-conversion-method-like-String-Arra.patch
| include/ruby/intern.h | ||
|---|---|---|
|
VALUE rb_String(VALUE);
|
||
|
VALUE rb_Array(VALUE);
|
||
|
VALUE rb_Hash(VALUE);
|
||
|
VALUE rb_Symbol(VALUE);
|
||
|
double rb_cstr_to_dbl(const char*, int);
|
||
|
double rb_str_to_dbl(VALUE, int);
|
||
|
/* parse.y */
|
||
| object.c | ||
|---|---|---|
|
}
|
||
|
/*
|
||
|
* call-seq:
|
||
|
* Symbol(arg) -> Symbol
|
||
|
*
|
||
|
* Converts <i>arg</i> to a <code>Symbol</code> by calling its
|
||
|
* <code>to_sym</code> method.
|
||
|
*
|
||
|
* Symbol("string") #=> :string
|
||
|
* Symbol(123456) #=> :"123456"
|
||
|
*/
|
||
|
static VALUE
|
||
|
rb_f_symbol(VALUE obj, VALUE arg)
|
||
|
{
|
||
|
return rb_Symbol(arg);
|
||
|
}
|
||
|
VALUE
|
||
|
rb_Symbol(VALUE val)
|
||
|
{
|
||
|
return rb_convert_type(val, T_SYMBOL, "Symbol", "to_sym");
|
||
|
}
|
||
|
/*
|
||
|
* Document-class: Class
|
||
|
*
|
||
|
* Classes in Ruby are first-class objects---each is an instance of
|
||
| ... | ... | |
|
rb_define_global_function("String", rb_f_string, 1);
|
||
|
rb_define_global_function("Array", rb_f_array, 1);
|
||
|
rb_define_global_function("Hash", rb_f_hash, 1);
|
||
|
rb_define_global_function("Symbol", rb_f_symbol, 1);
|
||
|
rb_cNilClass = rb_define_class("NilClass", rb_cObject);
|
||
|
rb_define_method(rb_cNilClass, "to_i", nil_to_i, 0);
|
||
| test/ruby/test_object.rb | ||
|---|---|---|
|
assert_raise(TypeError) { Hash(o) }
|
||
|
end
|
||
|
def test_convert_symbol
|
||
|
o = Object.new
|
||
|
def o.to_sym; "foo"; end
|
||
|
assert_raise(TypeError) { Symbol(o) }
|
||
|
def o.to_sym; :foo; end
|
||
|
assert_equal(:foo, Symbol(o))
|
||
|
def o.respond_to?(*) false; end
|
||
|
assert_raise(TypeError) { Symbol(o) }
|
||
|
end
|
||
|
def test_to_integer
|
||
|
o = Object.new
|
||
|
def o.to_i; nil; end
|
||