Ruby 变量赋值,如果没有';不存在

Ruby 变量赋值,如果没有';不存在,ruby,Ruby,我想将一个对象分配给包含另一个变量的变量,除非该变量不存在,在这种情况下,我想分配一个空对象 我有这样一个代码: if @myvar['one']['two'] newvar = {:three => @config['one']['two']} else input = {} end 有更简洁的方法吗?如果我正确理解了你的问题,你可以这样做: newvar = if @myvar['one']['two'] {:three => @config['o

我想将一个对象分配给包含另一个变量的变量,除非该变量不存在,在这种情况下,我想分配一个空对象

我有这样一个代码:

if @myvar['one']['two']
  newvar = {:three => @config['one']['two']}
else
  input = {}
end

有更简洁的方法吗?

如果我正确理解了你的问题,你可以这样做:

newvar = if @myvar['one']['two']
           {:three => @config['one']['two']}
         else
           {}
         end
然后可以使用
newvar
作为分配给填充哈希或空哈希的变量。此外,在调用
'two'
之前,您需要检查以确保
@myvar
存在,并且具有
'one'
键:

newvar = if @myvar && @myvar.has_key?('one') && @myvar['one']['two']
           {:three => @config['one']['two']}
         else
           {}
         end

假设你的代码有效。。。一行:

@myvar['one']['two'] ? newvar = {:three => @config['one']['two']} : input = {}
如果要防止出现nil
@myvar
,并确保其密钥为
one
two

@myvar && @myvar.has_key?('one') && @myvar['one']['two'] ? newvar = {:three => @config['one']['two']} : input = {}

这个三元组的唯一问题是,如果
@myvar['one']
不存在,
['two']
将导致一个NilClass错误。很公平,但我不喜欢假设任何东西。;-)什么是
@myvar
?什么是
@myvar['one']
@myvar.has_key?('one')
如果
@myvar
nil
则引发错误。此外,原始代码根据条件需要两个不同的变量:newvar和input