如果定义了key,则附加到值,如果未定义则声明

时间:2014-07-13 20:41:48

标签: ruby-on-rails ruby ruby-on-rails-4

在下面的代码中,如果定义了一个键,我试图将文本附加到字符串值。如果未定义密钥,则只需使用文本定义密钥/值对。

if my_hash.key?(:my_key)
  my_hash[:my_key] << 'My text'
else
  my_hash[:my_key] = 'My text'
end

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以定义默认为空字符串的哈希。然后,您不必处理空值:

hash = Hash.new { |h, k| h[k] = '' }
hash[:key] << 'string'

puts hash
# => { :key => 'string' }

答案 1 :(得分:0)

根据MrYoshiji和Damien Roche的建议,问题的解决方案如下:

my_hash[:my_key] = my_hash[:my_key].to_s + 'My text'

此外,如果文本应该用空格分隔,以防:my_key被定义为值,则可以这样做:

my_hash[:my_key] = [ my_hash[:my_key].to_s, 'My text' ].reject(&:empty?).join(' ')

然后可以将其包含在辅助函数中以使事情变得更容易:

def add_str(str, new_str)
  [str.to_s, new_str].reject(&:empty?).join(' ')
end

my_has[:my_key] = add_str my_has[:my_key], 'My text'