Actions
Feature #16783
closedImplicit vs explicit self
Feature #16783: Implicit vs explicit self
Status:
Closed
Assignee:
-
Target version:
-
Description
I recently ran into this case while trying to explain why self is needed for calling setters (can't disambiguate between creating a local variable versus calling the setter because of the syntactic sugar). However, I couldn't come up with a good reason why self throws an error when calling private getters. It feels inconsistent? I think it would be more consistent to be able to specify self.private_getter and self.private_setter = "value", though I don't know the implications. Would this be possible? Would people appreciate this?
class Thing # works def public_method_calling_private_setter_with_explicit_self self.name = "value" end # works, but doesn't call the private setter # common beginner mistake def public_method_creating_local_variable name = "whoops!" end # works def public_getter_accessing_instance_variable @name end # works def public_getter_calling_private_getter_with_implicit_self private_name end # DOES NOT work def public_getter_calling_private_getter_with_explicit_self self.private_name end private def name=(value) @name = value end def private_name @name end end thing = Thing.new thing.public_getter_accessing_instance_variable #=> nil thing.public_method_calling_private_setter_with_explicit_self # => "value" thing.public_getter_accessing_instance_variable #=> "value" thing.public_method_creating_local_variable # => "whoops!" # instance variable unchanged thing.public_getter_accessing_instance_variable # => "value" thing.public_getter_calling_private_getter_with_implicit_self # => "value" # should this work? thing.public_getter_calling_private_getter_with_explicit_self # => NoMethodError (private method `private_name' called for Thing)
Updated by koriroys (Kori Roys) over 5 years ago
- Description updated (diff)
phrasing
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
Updated by koriroys (Kori Roys) over 5 years ago
😻
Actions