如何在类中创建自定义proc,这样我可以这样做:params_hash.downcase_keys而不是downcase_keys(params_hash)?

问题描述 投票:0回答:1

我有一个键值的散列,我想对所有键进行小写。但是我不想创建一个局部变量,我宁愿从功能上做到这一点。

不:x = downcase_keys(params_hash)

但是:params_hash.downcase_keys

如何在红宝石中执行此操作?

ruby lambda functional-programming proc
1个回答
0
投票

我不明白您为什么将此问题标记为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}

© www.soinside.com 2019 - 2024. All rights reserved.