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
|