我很难理解Ruby中的attr_accessor
。谁能给我解释一下这个问题?
attr_accessor 只是一个方法。(这个链接应该提供更多关于它如何工作的见解--看一下生成的方法对,一个教程应该告诉你如何使用它)。
诀窍在于,class'在Ruby中不是一个定义*(在C++和Java等语言中是"只是一个定义"),但它是一个评估的*表达式。在这个评估过程中,
attr_accessor'方法被调用,从而修改了当前的类--记住隐含的接收器:self.attr_accessor',其中
self'是此时的"open" 类对象。
对`attr_accessor'和朋友的需求,是,嗯。
1.Ruby,像Smalltalk一样,不允许在该对象的方法1之外访问实例变量。也就是说,实例变量不能以x.y
的形式访问,这在Java甚至Python中是很常见的。在Ruby中,y
总是被认为是要发送的信息(或要调用的方法")。因此,attr_*
方法创建了包装器,通过动态创建的方法代理实例@variable
的访问。
2.模板很烂
希望这能澄清一些小细节。编码愉快。
1 这不是严格意义上的,有一些"技术"围绕这一点,但没有语法支持"公共实例变量"访问。