返回哈希的默认值

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

我需要帮助。我正在用Ruby进行基本练习,但是现在我不太了解defult。我需要编写一个称为temp的函数,该函数可以接收一个参数(哈希)。该函数必须返回相同的哈希值,但要进行以下更改:

  • 如果散列没有键,则:puppy返回4作为值。
  • 如果散列没有键:cat,则返回6作为值。
ruby hash default
3个回答
0
投票

您的问题有点令人困惑。

If the hash doesn't have the key :puppy return 4 as value.
If the hash doesn't have the key :cat return 6 as value.

[我认为您需要一个函数,该函数返回传入哈希的版本,该版本分别将键:puppy:cat分别默认为4和6,并假设它们尚未位于传入哈希中。这应该工作:

def temp(source)
  return Hash.new do |h, k|
    h.fetch(k, case k when :puppy then 4; when :cat then 6; end)
  end.merge(source)
end

-1
投票
def temp(h)
  return 4 if h[:puppet].nil?
  return 6 if h[:cat].nil?
  h
end

-1
投票

假设此问题与默认值有关,那么您需要使用defaultdefault_proc。您可以创建一个新的哈希,并通过Hash.new为其提供默认处理。

def temp(h)
  Hash.new do |hash, key|
    if key == :puppy
      h.fetch(:puppy, 4)
    elsif key == :cat
      h.fetch(:cat, 6)
    else
      h[key]
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.