这是一种常见模式:如果变量不存在,我会收到undefined local variable or method
错误。
现有代码有if variable_name.present?
,但这并未考虑不存在的变量。
如何检查变量的值并考虑它根本不存在?
我试过了:
if (defined? mmm) then
if mmm.present? then
puts "true"
end
end
但Ruby仍检查内部mmm.present?
并在不存在时抛出“没有这样的变量”。
我确信这有一个共同的模式/解决方案。
答案 0 :(得分:24)
将present?
更改为!= ''
并使用&&如果第一个表达式为真,则仅尝试评估seond表达式的运算符:
if defined?(mmm) && (mmm != '') then puts "yes" end
但实际上从2019年开始,这不再需要,因为以下工作
irb(main):001:0> if (defined? mm) then
irb(main):002:1* if mm.present? then
irb(main):003:2* p true
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> if (defined? mm) then
irb(main):007:1* p mm
irb(main):008:1> end
=> nil
答案 1 :(得分:1)
尝试:
if defined?(mm) && !mm.blank?
puts "acceptable variable"
end
它可以确保您不会获得未定义的变量或nil或空值。
你可以只使用定义?检测expired-session-hash,特别是深层哈希。
if defined?(session[:user]['name'])
puts "active session"
else
puts "expired session"
end