如果我有像這樣的接受別名和根名稱爲基本顏色列表的哈希:使用lambda表達式,而不依賴於條件語句或普查員
coloraliases = {
["red", "crimson", "auburn", "rose", "maroon", "burgundy"] => "red",
["blue", "teal", "aqua", "azure", "cobalt"] => "blue",
["green", "emerald", "absinthe", "avocado", "lime"] => "green",
["yellow", "banana", "lemon", "gold", "citrine"] => "yellow"
}
我不能只是這樣做:
coloraliases["crimson"]
#=> "red"
我想哄像這樣此行爲:
basecolor = lambda do |str|
x = nil
coloraliases.each do |keys, value|
if keys.include?(str)
x = value
break
end
end# of coloraliases hash
x
end
應該按預期工作。
我想知道是否有更優雅的方式來做到這一點,特別是不涉及條件塊甚至統計員的方式。三元運算符是好的或更好的,因爲它們是緊湊的,但仍然不是優選的,因爲它們是條件。
所有我能想到的是哈希選擇器模式:https://www.codemy.net/posts/hash-選擇器模式 這與做coloraliases ['crimson']非常相似... ... –
每個鍵單獨映射到相應的基本顏色有什麼問題?我現在看到@sawa在我救了這個之前建議了幾秒鐘。 – pjs