Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果定义了键,则附加到值;如果未定义,则声明_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如果定义了键,则附加到值;如果未定义,则声明

Ruby on rails 如果定义了键,则附加到值;如果未定义,则声明,ruby-on-rails,ruby,ruby-on-rails-4,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 if my\u hash.key?(:my\u key) my_hash[:my_key]正如Yoshiji先生和Damien Roche先生所建议的,这个问题的解决方案如下: my_h

在下面的代码中,如果定义了键,我将尝试将文本附加到字符串值。如果没有定义键,那么它只是用文本定义键/值对

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

my_hash[:my_key]正如Yoshiji先生和Damien Roche先生所建议的,这个问题的解决方案如下:

my_hash[:my_key] = my_hash[:my_key].to_s + 'My text'
此外,如果文本应以空格分隔,则可以执行以下操作:

my_hash[:my_key] = [ my_hash[:my_key].to_s, 'My text' ].reject(&:empty?).join(' ')
然后可以将其封装在一个helper函数中,使事情变得更简单:

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'

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

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

puts hash
# => { :key => 'string' }
hash=hash.new{h,k{h[k]=''''}
散列[:key]{:key=>string'}

试试这个:
my\u hash[:my\u key]=my\u hash[:my\u key].presence.to\u s+“我的文本”
:如果
my\u hash[:my\u key]
nil
,它将调用
nil.to\u s
,返回空字符串无需
presence
,您可以使用
my\u hash[:my\u key]=my\u hash[:my\u key>。
。看到完美!这两种解决方案都有效,所以我想越不详细越好。但为什么这样做有效?如果未定义密钥,to会发出错误吗?它工作是因为
nil。to
变为
检查上述链接。这是因为
NilClass
有一个
to\s
方法返回空字符串,而缺少的哈希键返回nil
my_hash[:doesn_exist]#=>nil
。这就是为什么不需要
在场