我有一个键值的哈希值,我想把所有的键都大写。但是我不想创建一个局部变量,我宁愿在功能上这样做。
不: x = downcase_keys(params_hash)
但是这个: params_hash.downcase_keys
在红宝石中如何做到这一点?
我不明白为什么您将这个问题标记为functional-programming
似乎您正在寻找一种调用Hash
对象的方法。
请注意,这样做可能会遇到问题,因为重复的密钥将被覆盖。
h = {"a" => 1, "B" => 2}
# Singleton method on the object
def h.downcase_keys
temp = map {|k,v| [k.downcase, v]}.to_h
clear
merge! temp
end
h.downcase_keys()
p h # {"a"=>1, "b"=>2}
# Method available on all Hash objects
class Hash
def downcase_keys
temp = map {|k,v| [k.downcase, v]}.to_h
clear
merge! temp
end
end
h = {"a" => 1, "B" => 2}
h.downcase_keys()
p h # {"a"=>1, "b"=>2}
def downcase_keys(hash)
hash.downcase_keys
end
h = {"C" => 1, "B" => 2, "D" => 3}
downcase_keys(h)
p h # {"c"=>1, "b"=>2, "d"=>3}