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