在下面的代码中,如果定义了一个键,我试图将文本附加到字符串值。如果未定义密钥,则只需使用文本定义密钥/值对。
if my_hash.key?(:my_key)
my_hash[:my_key] << 'My text'
else
my_hash[:my_key] = 'My text'
end
有更好的方法吗?
答案 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'