Tag: 二传手

setter方法的“反私人”属性

除非存在具有相同名称的局部变量,否则可以在没有显式接收器的情况下使用Getter方法: class A; attr_reader :foo end A.new.instance_eval do @foo = :foo p foo end # => :foo 当存在具有相同名称的局部变量时,这将不成立,因为当存在歧义时,解释为局部变量具有优先级而不是方法调用。 class A; attr_reader :foo end A.new.instance_eval do foo = :bar @foo = :foo p foo end # => :bar 但是,即使没有在相关表达式之前分配具有相同名称的局部变量,也不能在没有显式接收器的情况下使用setter方法: class A; attr_writer :foo end A.new.instance_eval do foo = :foo # nil 这个setter方法的“反私人”属性如何合理?