对象变量不能为空?

时间:2014-05-22 21:51:07

标签: ruby

class Foobar
  def initialize
    self.placeHolder = ''
  end
end

bbq = Foobar.new

当我运行以下代码时,我收到NoMethodError。这对我来说很困惑,为什么我不能拥有一个空的实例变量?我知道我可以有一个空的类变量,但是当我包含self它为什么会给我这个错误?

3 个答案:

答案 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