class Foobar
def initialize
self.placeHolder = ''
end
end
bbq = Foobar.new
当我运行以下代码时,我收到NoMethodError
。这对我来说很困惑,为什么我不能拥有一个空的实例变量?我知道我可以有一个空的类变量,但是当我包含self
它为什么会给我这个错误?
答案 0 :(得分:3)
您的代码正在尝试调用您的班级没有的placeHolder=
方法。
@placeHolder = ''
应该适合你。
或者,您可以将此行添加到您的班级:
attr_accessor :placeHolder
它会自动为您创建一个getter和setter方法。有关详细说明,请参阅this answer。
当您在ruby中执行someObject.someName
时,这总是意味着在someName
上调用someObject
方法。 (现在你可以伪造一些其他类型的行为,因为你可以定义一个method_missing
方法来处理一个不存在的方法。)所以当你做self.someName
时,只是意味着调用{ {1}}方法在类的某个实例上。
答案 1 :(得分:2)
您尝试调用Foobar类的实例方法placeHolder=
。 Foobar类没有这个方法,所以它正确地给你一个NoMethodError。如果要设置实例变量,则执行该操作的语法为@placeholder = ''
。如果您希望使用访问者方法,则需要自己编写一个或在课程正文中包含attr_accessor :placeHolder
。
(顺便说一句,在Ruby中使用snake_case而不是camelCase是惯用的。)
答案 2 :(得分:2)
这是因为在Foobar类中没有定义attr_accessors。
attr_accessor :placeholder