这是一个课程的作业。我想为甜甜圈店创建一个注册类型的应用程序。应用程序应接受"l"
列出flavor,"a"
添加flavor,"d"
删除flavor,"e"
退出。价格应按升序列出。添加香精时,应首先询问味道,然后再询问价格。
我的应用程序正在运行。它使用Jekyll(类使用的)。
item = {}
item_asc = {}
puts "Welcome to d0nutz flavor menu"
input = ""
division_line = lambda {30.times {|x| print "="}}
while input != "e"
division_line.call
puts "\n(l)ist flavors\n(a)dd a flavor\n(d)elete a flavor\n(e)xit application"
division_line.call
print "\nYour choice: "
input = gets.chomp
case input
when "l"
item_asc.each {|x,y| puts "Flavor: #{x} - Cost: $#{y}"}
when "a"
puts "Enter new flavor: "
flavor = gets.chomp
puts "Enter cost: "
cost = gets.chomp.to_i
item[flavor] = cost
item_asc = item.sort_by {|flavor,price| price}
input = ""
when "d"
puts "Enter a flavor to remove"
to_delete = gets.chomp
item.delete("#{to_delete}") {|x| puts "#{x} not found."}
item_asc = item.sort_by {|flavor,price| price}
item_asc.each {|x,y| puts "Flavor: #{x} - Cost: $#{y}"}
input = ""
when "e"
else
puts "\nThat is not a recognised command"
end
end
然而,它比我在这里更加丑陋。我很感激任何意见。我有兴趣看看我应该为清理目的做些什么,也许可以在应有的地方添加类/方法,并使这更像Rubyesque。
答案 0 :(得分:2)
我会将代码更改为以下内容。这不是重构,因为它不等同于您的代码。特别是,它与您的代码不一致。例如,当它提示时,它有时不会改变一行,有时不会像你的代码那样;我的代码永远不会改变一行。我的代码也总是在操作后打印列表,这与您的代码不同,特别是在添加项目时,代码不会这样做。此外,与您的代码不同,它有时不会结束消息,有时也没有句号;我的代码中的消息永远不会以句点结束。
def prompt s
print "#{s}: "
gets.chomp
end
def list_items
@items.each{|k, v| puts "Flavor: #{k} - Cost: $#{v}"}
end
def sort_items
@items = @items.sort_by{|flavor, price| price}.to_h
list_items
end
puts "Welcome to d0nutz flavor menu"
@items = {}
loop do
puts(
?= * 30,
"(l)ist flavors",
"(a)dd a flavor",
"(d)elete a flavor",
"(e)xit application",
?= * 30,
)
case prompt("Your choice")
when ?l
list_items
when ?a
@items[prompt("Enter new flavor")] = prompt("Enter cost").to_i
sort_items
when ?d
@items.delete(prompt("Enter a flavor to remove")){|k| puts "#{k} not found"}
sort_items
when ?e
break
else
puts "That is not a recognised command"
end
end