From eb67c603ca7e435181684857e650b4633fda5bb6 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 4 Sep 2020 22:18:59 +0900 Subject: [PATCH] Added Symbol#name https://bugs.ruby-lang.org/issues/16150#change-87446 --- NEWS.md | 7 +++++++ string.c | 1 + test/ruby/test_symbol.rb | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/NEWS.md b/NEWS.md index 1bc19e83e1..4b4d13a0c6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -165,6 +165,12 @@ Outstanding ones only. * Symbol#to_proc now returns a lambda Proc. [[Feature #16260]] + * New method + + * Symbol#name, which returns the name of the symbol if it is + named. The returned string cannot be modified. + [[Feature #16150]] + * Warning * Modified method @@ -343,6 +349,7 @@ Excluding feature bug fixes. [Feature #16378]: https://bugs.ruby-lang.org/issues/16378 [Feature #16828]: https://bugs.ruby-lang.org/issues/16828 [Bug #14541]: https://bugs.ruby-lang.org/issues/14541 +[Feature #16150]: https://bugs.ruby-lang.org/issues/16150 [Feature #16175]: https://bugs.ruby-lang.org/issues/16175 [Feature #15973]: https://bugs.ruby-lang.org/issues/15973 [Feature #16614]: https://bugs.ruby-lang.org/issues/16614 diff --git a/string.c b/string.c index b9cc0486bc..7cfeaae180 100644 --- a/string.c +++ b/string.c @@ -11539,6 +11539,7 @@ Init_String(void) rb_define_method(rb_cSymbol, "inspect", sym_inspect, 0); rb_define_method(rb_cSymbol, "to_s", rb_sym_to_s, 0); rb_define_method(rb_cSymbol, "id2name", rb_sym_to_s, 0); + rb_define_method(rb_cSymbol, "name", rb_sym2str, 0); rb_define_method(rb_cSymbol, "intern", sym_to_sym, 0); rb_define_method(rb_cSymbol, "to_sym", sym_to_sym, 0); rb_define_method(rb_cSymbol, "to_proc", rb_sym_to_proc, 0); diff --git a/test/ruby/test_symbol.rb b/test/ruby/test_symbol.rb index f6ef70f3df..f7f17b8d67 100644 --- a/test/ruby/test_symbol.rb +++ b/test/ruby/test_symbol.rb @@ -105,6 +105,12 @@ class TestSymbol < Test::Unit::TestCase end end + def test_name + assert_equal("foo", :foo.name) + assert_same(:foo.name, :foo.name) + assert_predicate(:foo.name, :frozen?) + end + def test_to_proc assert_equal %w(1 2 3), (1..3).map(&:to_s) [