【发布时间】:2016-04-07 04:32:03
【问题描述】:
我刚刚开始使用 OOP,并且正在努力研究如何实现它。我不知道如何使用hash.new 方法创建类的实例。这是一个基本程序,它从用户那里获取输入并将其存储在哈希中。然后我计划将散列推入一个数组以利用索引。下面是代码
class Customer
def initialize(id, name, address, phone, email, bank_balance)
@id = id
@name = name
@address = address
@phone = phone
@email = email
@bank_balance = bank_balance
end
end
puts "Would you like to create an account?"
answer = gets.chomp
loop do
new_hash = {}
if answer.downcase.start_with?('y')
puts "Enter your name"
name = gets.chomp.downcase
new_hash['name'] = name
puts "Enter your address"
address = gets.chomp.downcase
new_hash['address'] = address
puts "Enter your ph number"
number = gets.chomp
number = number.split.join
new_hash['number'] = number
puts "Enter your email"
email = gets.chomp.downcase
new_hash['email'] = email
puts "Enter your bank balance"
bank_balance = gets.chomp
bank_balance = "$" + '%.2f' % bank_balance
new_hash['bank_balance'] = bank_balance
customer << new_hash
binding.pry
puts "Thankyou, details successfully Added"
break
else
break
end
end
【问题讨论】:
-
customer << new_hash:customer来自哪里? -
你的班级是
Customer:你需要customer = Customer.new(id, name, address, phone, email, bank_balance)。 -
感谢@Amadan 的回复。我只是很困惑如何通过客户输入来实现它?
-
这取代了你的
new_hash;删除包含它的每一行。你不厌其烦地创建一个类,然后使用散列来存储你的值。就像盖了豪宅后住在草坪上的拖车里一样。您的用户输入以变量name、address... 结束,然后只需使用这些变量并将其传递给Customer构造函数,如我之前的评论所示。 -
此外,您可以从
initialize中删除参数并设置一些getter / setter (attr_accessor :name, :address, :phone, ...)。这使您可以一一设置客户的属性,即customer = Customer.new和稍后的customer.name = gets.chomp.downcase