2013-09-09 8 views
1

Я новичок в программировании и написал простую программу:Создать новый экземпляр класса в Ruby,

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>' 

Так что я сделал не так ? Я знаю, что есть другие способы создания нового экземпляра, но я хочу сделать это так! Благодаря!

ответ

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 
+2

также отметить, инициализатор ничего не делает в данный момент –

+0

@JanDvorak я не могу изменить линию, которую вы упомянули .. Существует некоторая блокировка в пост. :( –

+0

У вас есть опечатка на второй строке вашего первого примера кода. 'Attr_accessor'. –

2

Вы не внесли каких-либо аксессуаров для своих переменных. Добавьте эти

attr_accessor :text 
attr_accessor :number 

See this question