[#85940] [Ruby trunk Bug#14578] Forking a child process inside of a mutex crashes the ruby interpreter — ben.govero@...
Issue #14578 has been reported by bengovero (Ben Govero).
3 messages
2018/03/05
[#86205] [Ruby trunk Feature#14618] Add display width method to String for CLI — aycabta@...
Issue #14618 has been reported by aycabta (aycabta .).
3 messages
2018/03/19
[#86366] Re: [ruby-cvs:70102] usa:r63008 (trunk): get rid of test error/failure on Windows introduced at r62955 — Eric Wong <normalperson@...>
usa@ruby-lang.org wrote:
3 messages
2018/03/28
[ruby-core:86154] [CommonRuby Feature#11541] Let attr_accessor, _reader & _writer return symbols of the defined methods
From:
gfuji@...
Date:
2018-03-16 06:12:49 UTC
List:
ruby-core #86154
Issue #11541 has been updated by gfx (Goro FUJI).
+1
I'm about to issue the same feature request
----------------------------------------
Feature #11541: Let attr_accessor, _reader & _writer return symbols of the defined methods
https://bugs.ruby-lang.org/issues/11541#change-71032
* Author: iGEL (Johannes Barre)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
Since Ruby 2.1, `def` returns a symbol with the name of the just defined method, so you can easily pass it to visibility modifiers like `private`, `protected`, and `public`. Why not let `attr_reader` & friends return an array with the names of the defined methods, so we can easily write:
~~~
private attr_reader :method1, :method2
~~~
To fully support the example above, `private` would be required to accept also arrays with method names. Without it, it would require the star syntax, which would already be an improvement:
~~~~
private *attr_reader :method1, :method2
~~~~
I wrote two test cases to better illustrate the impact:
~~~~
test/ruby/test_module.rb:
def test_attr_return_value
c = Class.new
assert_equal(%i(reader1 reader2), c.class_eval { attr_reader(:reader1, :reader2) })
assert_equal(%i(writer1= writer2=), c.class_eval { attr_writer(:writer1, :writer2) })
assert_equal(%i(accessor1 accessor1= accessor2 accessor2=), c.class_eval { attr_accessor(:accessor1, :accessor2) })
end
test/ruby/test_method.rb:
def test_visibility_modifier_with_array
c = Class.new do
def m1; end
def m2; end
end
c.class_eval { private %i(m1 m2) }
assert(c.private_method_defined?(:m1))
assert(c.private_method_defined?(:m2))
c.class_eval { protected %w(m1 m2) }
assert(c.protected_method_defined?(:m1))
assert(c.protected_method_defined?(:m2))
c.class_eval { public :m1, [:m2] } # Not sure if this should be allowed.
assert(c.public_method_defined?(:m1))
assert(c.public_method_defined?(:m2))
assert_raise(NameError) do
c.class_eval { private %i(m1 m2 m3) }
end
assert(c.private_method_defined?(:m1))
assert(c.private_method_defined?(:m2))
assert_raise(TypeError) do
c.class_eval { protected [:m1, 2] }
end
assert(c.private_method_defined?(:m1))
assert_raise(TypeError) do
c.class_eval { public [:m1, [:m2]] } # Not sure about this case. Should it be allowed?
end
assert(c.public_method_defined?(:m1))
end
~~~~
WDYT? Thank you!
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>