如果你想命名每个实例(所以使用散列而不是数组),你可以这样做:
steaks = {}
["Select", "Choice", "Prime"].each do |grade|
# I think using a symbol as key in this case is nicer
steaks[grade.downcase.to_sym] = Steak.new(grade)
end
还是有点短/最佳使用地图就像你问(支持从红宝石2.1开始):
steaks = ["Select", "Choice", "Prime"].map{ |g|
[g.downcase.to_sym, new Steak(grade)]
}.to_h
另一种方法是创建一个Butcher
类抽象了这一切。
butcher = new Butcher.new
butcher.addNewSteak(Steak.new("Select"))
butcher.addNewSteak(Steak.new("Choice"))
butcher.addNewSteak(Steak.new("Prime"))
# Or added/created using a loop
["Select", "Choice", "Prime"].each do |grade|
butcher.addNewSteak(Steak.new(grade)
end
# Get a list of steaks
butcher.getAllSteaks()
# Get steak by grade
bucher.getSteakByGrade("Select")
# Get all steaks by grade greater than
bucher.getSteakGradeGT("Choice")
屠夫类的实施被故意遗漏。制定是为了应对亚历杭德罗·C的答案下提出的问题
哪儿了你期望“牛排”来自哪里? – ndn
除了提供的答案,您可能会对Ruby中的并行赋值感兴趣。'a,b,c = [1,2,3]'然后'a#=> 1','b#=> 2'和'c#=> 3'。 –