有没有更好的方法来写这个?基本上我想在哈希中添加一个参数。如果参数是一个key-val对,那么id喜欢按原样添加它。如果参数是一个字符串,我想将其添加为具有nil值的键。以下代码有效,但是有更合适(简单)的方式吗?
第二个问题,是否在一个带有两个参数| key,val |的数组上调用每个方法自动将数组转换为哈希值?
@some_hash = {}
def some_method(input)
if input.is_a? Hash
input.each {|key, val| @some_hash[key] = val}
else
input.split(" ").each {|key, val| @some_hash[key] = val}
end
end
some_method("key" => "val")
答案 0 :(得分:2)
这给出了问题中指示的结果,但它的工作方式与OP给出的代码不同(这意味着OP的代码不能正常工作):
@some_hash = {}
def some_method(input)
case input
when Hash then @some_hash.merge!(input)
when String then @some_hash[input] = nil
end
end
some_method("foo" => "bar")
some_method("baz")
@some_hash # => {"foo" => "bar", "baz" => nil}
数组永远不会自动转换为哈希。你可能会提到的是,数组[[:foo, :bar]]
中数组的元素可以单独引用:
[[:foo, :bar]].each{|f, b| puts f; puts b}
# => foo
# => bar
这是由于破坏性的分配。必要时,Ruby将数组的元素作为单独的东西取出并尝试调整变量的数量。它与:
相同f, b = [:foo, :bar]
f # => :foo
b # => :bar
此处,您未获得f # => [:foo, :bar]
和b # => nil
。