条件付きメソッドを定義してコードをリファクタリングしようとしています。
現在のコードは完全に機能しますが、既存の構造と可読性を維持しながら完全にリファクタリングする必要があります。ハッシュの配列のメソッドを定義してリファクタリングする
このシナリオでは、ユーザーに選択を求めるメッセージが表示されます。その選択は、ハッシュの配列内のシンボルに関連付けられます。方法は、このサンプルの最後の2つのputs
を置き換える必要があります。コードはこれらの2行を何度も何度も表示します。
puts"Red, white, or something else?"
user_category_selection = gets.chomp.downcase
puts "-"*80
wine_rack = [
{ name: "The Fugitive",
vintage: 2010,
category: "Red",
grape_composition: "Red Blend",
location: "Napa, California",
personal_rating: 91},
{ name: "Au Bon Climat",
vintage: 2010,
category: "White",
grape_composition: "Chardonnay",
location: "Santa Barbara, California",
personal_rating: 89},
{ name: "Laurent-Perrier",
vintage: "Non-vintage",
category: "Something Else",
grape_composition: "Ultra Brut",
location: "France",
personal_rating: 92}
]
これが機能していない作品です。
def vintage_name_location(category)
category = wine_rack[:category].downcase
while category.downcase.include? user_category_selection
puts "#{wine[:vintage]} #{wine[:name]}, #{wine[:location]}".center(80)
puts "#{wine[:grape_composition]}, rated #{wine[:personal_rating]} points".center(80)
end
end
puts vintage_name_location(user_category_selection)
コードの残りの部分がある:あなたが正しく説明してきたように
until ["white", "red", "something else"].include? user_category_selection.downcase
puts "Pardon me for asking, but are you intoxicated already?".center(80)
puts "I said red, white, or something else.".center(80)
user_category_selection = gets.chomp
end
if user_category_selection.downcase.eql? "red"
puts "May I suggest one of these delightful reds:"
puts "--------------------------------------------------".center(80)
for wine in wine_rack
if wine[:category].downcase == user_category_selection
puts "#{wine[:vintage]} #{wine[:name]}, #{wine[:location]}".center(80)
puts "#{wine[:grape_composition]}, rated #{wine[:personal_rating]} points".center(80)
puts "--------------------------------------------------".center(80)
end
end
elsif user_category_selection.downcase.eql? "white"
あなたはそのようcategory_to_winesは[user_category_selection.downcase] '与え'、「コードの残りの部分」にハッシュ 'category_to_wines'を構築検討するかもしれませんあなたには推奨するワイン(ハッシュ)のリストがあります。次のようにすることができます: 'category_to_wines = wine_rack.each_with_object({}){| wine、h | (h [wine [:category] .downcase] || = [])<<ワイン}。各キーの "カテゴリ"(ダウンケース)の値は、そのカテゴリで一致するワイン(ハッシュ)の配列です。より大きな画像を見ると、アプリケーションにデータベースを使用することを検討する必要があります。 –
私は 'for'ループを使用しない* * *をお勧めします。 Rubyの方法は 'each'または' map'を使って反復することです。あなたのコードにインデントをデバッグ/メンテナンスの補佐として維持してください。長期的には本当に役立ちます。あなたのコードは完全ではありません。 「[mcve]」をお読みください。文法的に正しいものが必要です。 –
Tin Manありがとうございました - 現時点では、私は意図的にさらなる実践のためにループを使用しています。まったく同感です。このコードは、簡潔にするために完全に公開されていませんでした。 –