Ruby 由attr_访问器创建的方法对子类不可用
(stackoverflow正在破坏格式) 在以下情况下,由Human创建的方法名称对Boy不可用。我的理解正确吗,attr_访问器方法不正确Ruby 由attr_访问器创建的方法对子类不可用,ruby,Ruby,(stackoverflow正在破坏格式) 在以下情况下,由Human创建的方法名称对Boy不可用。我的理解正确吗,attr_访问器方法不正确 可用于子类。我需要使用超类来访问attr\u accessor添加的方法。您正在寻找的是cattr\u accessor,它解决了这个特定问题: 以下是您的示例,已修复: class Human def self.age @age = 50 end def self.age=(input) @age = input en
可用于子类。我需要使用超类来访问attr\u accessor添加的方法。您正在寻找的是cattr\u accessor,它解决了这个特定问题: 以下是您的示例,已修复:
class Human
def self.age
@age = 50
end
def self.age=(input)
@age = input
end
cattr_accessor :name
self.name = 'human'
end
class Boy < Human
end
puts Human.age
puts Boy.age
puts Human.name
puts Boy.superclass.name
puts Boy.name # => 'human'
类人类
自我年龄
@年龄=50
结束
def self.age=(输入)
@年龄=输入
结束
cattr_访问器:名称
self.name='human'
结束
班上男孩<人
结束
把人类的年龄
把男孩的年龄
把人名
输入Boy.superclass.name
将Boy.name#=>“人类”
人和男孩是两个不同的对象。两个对象永远不能共享一个实例变量。它们都有该方法,但该方法将访问对象的适当ivar。Railsclass\u属性
方法在这种情况下会更好
cattr\u访问器
使所有类和这些类的实例共享相同的属性值。我不确定这是否是正确的行为。它们都访问相同的属性,所以这是有意义的。如果要为子类声明不同的值,可能需要重新声明cattr_访问器。我应该提到我使用cattr_访问器解决了这个问题。然而,我真的很想了解attr_访问器是如何工作的。我的理解是它存储了一个实例变量。但是子类可以使用即时变量。所以真正的问题是为什么Boy.name返回零。还有,为什么我不能在mac/FF上使用此站点的代码块。访问者不存储实例变量。您可以定义实例变量,而无需使用访问器。访问器用于公开实例变量。您可以通过缩进4个空格或突出显示块并选择“101010”图标来突出显示代码。我自己刚刚尝试过,它成功了-该方法对Boy可用-当然Boy.name为零,因为Boy没有名字。问题是你想让男孩继承人类的名字,而不是拥有自己的名字吗?要点已经不可用了。