diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-25 16:34:00 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-25 16:34:00 +0000 |
commit | 0b5685a69b4203367d6145cdcf37914f54573012 (patch) | |
tree | b16bf7b52747aa21ce52d1112666cec85ca425bc /string.c | |
parent | 4f180097d31c3532455366a23fe5830b32f5eb0a (diff) | |
download | ruby-0b5685a69b4203367d6145cdcf37914f54573012.tar.gz |
* string.c (sym_find): Add Symbol.find(str), which returns whether given
string is defined as symbol or not. [Feature #7854]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -8231,6 +8231,27 @@ str_scrub_bang(int argc, VALUE *argv, VALUE str) /* * call-seq: + * Symbol.find(str) -> symbol or nil + * + * Return the related symbol if the symbol already exists. + * Return nil if not. + */ + +static VALUE +sym_find(VALUE dummy, VALUE sym) +{ + ID id = rb_check_id(&sym); + + if (id) { + return ID2SYM(id); + } + else { + return Qnil; + } +} + +/* + * call-seq: * sym == obj -> true or false * * Equality---If <i>sym</i> and <i>obj</i> are exactly the same @@ -8787,6 +8808,7 @@ Init_String(void) rb_undef_alloc_func(rb_cSymbol); rb_undef_method(CLASS_OF(rb_cSymbol), "new"); rb_define_singleton_method(rb_cSymbol, "all_symbols", rb_sym_all_symbols, 0); /* in parse.y */ + rb_define_singleton_method(rb_cSymbol, "find", sym_find, 1); rb_define_method(rb_cSymbol, "==", sym_equal, 1); rb_define_method(rb_cSymbol, "===", sym_equal, 1); |