2015-08-21 3 views
-1

Я пытаюсь получить пользовательский ввод, чтобы создать новый объект User:Динамические переменные из пользовательского ввода

class User 
    attr_accessor :name 
    attr_accessor :age 
    attr_accessor :email 
end 

puts "Name:" 
input = gets.chomp.to_s 
name = "#{input} = User.new" 

puts "Age:" 
age = gets.chomp.to_s 

puts "Email:" 
email = gets.chomp.to_s 

name.name = "#{input}" 
name.age = "#{age}" 
name.email = "#{email}" 

puts "Name: #{input.name}, Age: #{input.age}, E-mail: #{input.email}" 

Как можно назвать вновь созданный объект так, что я могу ввести новые атрибуты? Нужно ли мне менять name часть

name.name = "#{input}" 
name.age = "#{age}" 
name.email = "#{email}" 

на вход пользователя?

ответ

0

В вашем случае input = gets.chomp.to_s является строкой, и строка не имеет никаких name, age и email методы, которые вы должны создать новый объект User, а затем наполнить его информацией пользователь дает вам, вы код это не так далеко от ответа, но есть много в маленьких ошибок, вот следующий рабочий код:

class User 
    attr_accessor :name 
    attr_accessor :age 
    attr_accessor :email 
end 

user = User.new 

puts "Name:" 
user.name = gets.chomp.to_s 

puts "Age:" 
user.age = gets.chomp.to_s 

puts "Email:" 
user.email = gets.chomp.to_s 

puts "Name: #{user.name}, Age: #{user.age}, E-mail: #{user.email}" 

Я надеюсь, что это помогает.

Кстати, чего вы пытались достичь с помощью этой строки: name = "#{input} = User.new"? Поскольку вы создаете только новую строку с содержимым «User.new» (как строковый литерал, он никак не выполняется Ruby), у вас никогда не будет нового объекта, окружая его объявление двойными (или одиночными) кавычками .