2013-07-11 4 views
0

Я бы хотел, чтобы пользователи могли динамически создавать объекты класса «Доходы» ниже. То есть, я хотел бы запустить мою программу и позволить пользователям вводить столько доходов, сколько им нравится, все они хранятся как экземпляры класса «Доходы».Как пользователь может динамически создавать объекты?

def prompt 
puts "> " 
end 

class Incomes 
def initialize(aName, aAmount, aCOLA) 
@name = aName 
@amount = aAmount 
@COLA = aCOLA 
end 
end 

def addIncome 
puts "What is the company name?" 
prompt 
aName = gets.chomp 
puts "What is the monthly amount?" 
aAmount = gets.chomp 
puts "What is the cost of living adjustment?" 
aCOLA = gets.chomp 
end 
#Now I want to be able to loop back through addIncome and create as many objects as the 
#user wants. Perhaps there's a better way to store this type of data? 
+0

Опубликовать свой код, возможно, лучше [Обзор кода SE] (http://codereview.stackexchange.com) – vgoff

+0

Почему SE? Я нахожу большинство ответов, которые мне нужны в stackoverflow. – Sangaku

+1

Это SE. Почему обзор кода? Потому что вы сможете получить реорганизованный код и теорию. Вы можете найти большинство ответов, которые вам нужны на SO, но это не имеет значения, когда вопрос, который вы задаете, изменяется. – vgoff

ответ

0
def prompt question 
    print "#{question} > " 
    gets 
end 

class Incomes 
    attr_reader :name, :amount, :COLA 
    @@instances_of_Incomes = Array.new 
    def initialize(aName, aAmount, aCOLA) 
    @name = aName 
    @amount = aAmount 
    @COLA = aCOLA 
    @instances_of_Incomes = Array.new 
    end 

    def self.addIncome 
    name = prompt "What is the company name?" 
    amount = prompt "What is the monthly amount?" 
    _COLA = prompt "What is the cost of living adjustment?" 
    @@instances_of_Incomes << Incomes.new(name, amount, _COLA) 
    end 

    def self.instances 
    @@instances_of_Incomes 
    end 
end 

5.times do 
    Incomes.addIncome 
end 
puts Incomes.instances 
Incomes.instances.each do |company| 
    puts company.name 
end 

Я переработан код, чтобы показать, что вы можете использовать материалы для создания экземпляров. Они являются неназванными классами, но сохраняются в переменной класса.

Я также показываю, что вы можете извлечь имя каждого экземпляра Income.

Я также отредактировал ваш SE Code Review question, с тем же кодом, так что, надеюсь, вы сможете получить хорошие отзывы.

+0

Я использовал ваш стиль именования, а не соглашения Ruby имен методов, используя underscored_names, а не имена camelCase. – vgoff

+0

Эй, это выглядит действительно хорошо vgoff. Спасибо! – Sangaku

+0

Я не знаю, должен ли этот ответ быть принят или нет, поскольку это не обязательно лучший способ сделать это. Но он отвечает на вопрос, который вы можете. Но вы можете отредактировать свой вопрос в Code Review и использовать этот код в своем вопросе и, надеюсь, получить лучшие отзывы. (Мне отказали в вашем «удержании» вопроса там.) – vgoff