如何在类中创建自定义进程,以便我可以做:params_hash.downcase_keys 而不是 downcase_k



我有一个键值的哈希值,我想把所有的键都大写。但是我不想创建一个局部变量,我宁愿在功能上这样做。

不: 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}

最新更新