Actions
Bug #9907
closedAbbreviated method assignment with private attr_writer/attr_reader does not work.
Description
This looks like a hole in the specification:
private def foo=(*) end
public def foo; 0 end
self.foo = 42
self.foo += 42
# private method `foo=' called for main:Object (NoMethodError)
private :foo
self.foo += 42
# private method `foo' called for main:Object (NoMethodError)
There is an exception for private
writers in the rule for private message sends, but apparently that exception needs to broadened so that it also works in the case of abbreviated assignments. I'm not entirely sure what this rule would be, but I don't think it would break backwards compatibility, since all situations that would work differently with the changed rule would currently raise a NoMethodError
anyway.
The rule should be something like:
private
methods can only be called without an explicit receiver.- An exception is made for method assignments, where the literal receiver
self
is also allowed in the assignee method expression.- This also applies to compound assignments:
self.foo ω= bar
shall always succeed if either or both offoo
andfoo=
areprivate
.
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0