从内部类使用attr_accessor?

时间:2015-06-15 11:50:10

标签: ruby attr-accessor

我试图在定义它的类中使用attr_accessor,但无济于事。为什么这不起作用?

我希望以下内容输出" new"在IRB:

irb(main):016:0> foo = StringClass.new
=> #<StringClass:0x2fbf2c0 @thing="old">
irb(main):017:0> foo.output
old
=> nil
irb(main):018:0> foo.change
=> "new"
irb(main):021:0> foo.output
old
=> nil

以下是实施:

class StringClass
  def initialize
    @thing = "old"
  end

  attr_accessor :thing

  def output
    puts thing
  end

  def change
    thing = "new"
  end
end

我可以看到定义了thing=方法。我不明白为什么在我尝试更改值时没有调用该方法。

2 个答案:

答案 0 :(得分:1)

试试这个 -

class StringClass
   ......

   def change
     self.thing = "new"
   end
 end
  1. foo = StringClass.new
  2. foo.change =&gt; “新”

答案 1 :(得分:1)

也就是说,因为应该使用self调用这些方法:

class StringClass
  def initialize
    @thing = "old"
  end

  attr_accessor :thing

  def output
    puts self.thing
  end

  def change
    self.thing = "new"
  end
end