我试图通过作为参数传入的键提取哈希值:
def menu
@menu = {"burger" => 5, "chips" => 2, "coke" => 1}
end
def receive_order(*items)
raise "Sorry not in stock" if items.all? { |key|@menu.has_key?(key) } == false
:ordered if items.all? { |key|@menu.has_key?(key) }
# I was hoping to do something like this...
bill << menu.values_at(items)
# bill being an empty array
end
Run Code Online (Sandbox Code Playgroud)
我在IRB玩过这个,然后又回来了[nil]
.有人能解释为什么吗?
如果我输入以下内容:
menu.values_at("burger", "chips")
Run Code Online (Sandbox Code Playgroud)
我明白了:
=> [5,2]
Run Code Online (Sandbox Code Playgroud)
那么为什么作为一个论点传入时它不会起作用?
Hash#values_at
如果你splat数组而不是传递数组本身将工作.
在张贴例如,该方法values_at
在Hash
考虑传递的数组作为一个单一的键,而不是在阵列作为单独的密钥的单个元素.
尝试:
bill << menu.values_at(*items)
Run Code Online (Sandbox Code Playgroud)
REPL(irb
/ pry
)中的示例:
>> hash = {a: 12, b: 7, c: 23}
=> {:a=>12, :b=>7, :c=>23}
>> keys_to_search = [:a, :b]
=> [:a, :b]
>> hash.values_at keys_to_search
=> [nil]
>> hash.values_at *keys_to_search
=> [12, 7]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3415 次 |
最近记录: |