1

私はプログラミングの初心者で、簡単なプログラムを書きました:

class Chapter
  def initialize
@text
@number
  end
end

def new_chapter
  tmp_chapter = Chapter.new
  tmp_chapter.text = 'Chapter about ..'
  tmp_chapter.number = '11'
end

puts new_chapter
puts ObjectSpace.each_object(Chapter) {|x| p x}

しかし、私はこのエラーが発生します:

 test2.rb:10:in `new_chapter': undefined method `text=' for #<Chapter:0x200b830>
 (NoMethodError)
 from test2.rb:14:in `<main>'

それで、私は何を間違えましたか?新しいインスタンスを作成する方法が他にもあることは知っていますが、この方法で作成したいと思います! ありがとう!

4

2 に答える 2

5

あなたはこれをしなければなりません:

class Chapter
 attr_accessor :text, :number
 def initialize
  @text
  @number
 end
end

これは以下のように書くことができますdef initialize ;@text; @number; end

class Chapter
 attr_accessor :text,:number
end
def new_chapter
 tmp_chapter = Chapter.new
 tmp_chapter.text = 'Chapter about ..'
 tmp_chapter.number = '11'
end

puts new_chapter
puts ObjectSpace.each_object(Chapter) {|x| p x}
# >> 11
# >> #<Chapter:0x9596eac @text="Chapter about ..", @number="11">
# >> 1
于 2013-09-09T11:07:07.670 に答える
2

変数のアクセサーを作成していません。これらを追加

attr_accessor :text
attr_accessor :number

この質問を参照してください

于 2013-09-09T11:07:32.153 に答える