nfm*_*nfm 1 ruby conventions instance-variables
请考虑以下代码:
class Dog
attr_accessor :name, :color
def initialize(name, color)
end
end
Run Code Online (Sandbox Code Playgroud)
在Ruby对象中,是直接访问实例变量(即@name = name)还是使用setter/getter方法(即name = name)的约定?
前者对我来说更清楚,但如果你实现自己的setter/getter方法(例如同时增加一个类变量),那么你最终必须使用两种方法(即@name = name ; color = color).
Ruby社区中的惯例是什么?我应该如何编写代码以便将其他人阅读?
使用name = value是一个错误,因为它创建了一个名为的局部变量name.你必须使用self.name = value.
至于惯例,@name如果你可以保证访问器总是轻量级attr_accessor的话,你只能使用它.在所有其他情况下,使用@nameover self.name将违反封装并让自己头疼.您在问题中给出了确切的原因 - 如果getter/setter中有额外的逻辑,如果直接访问实例变量,则必须复制它.