如何在没有"未定义的局部变量或方法"的情况下检查变量是否存在?

Mic*_*ant 15 ruby variables ruby-on-rails exists undefined

这是一种常见的模式:如果变量不存在,我会收到undefined local variable or method错误.

现有代码有,if variable_name.present?但这并没有考虑到不存在的变量.

如何检查变量的值并考虑它根本不存在?

我试过了:

if (defined? mmm) then
  if mmm.present? then
    puts "true"
  end
end
Run Code Online (Sandbox Code Playgroud)

但Ruby仍然检查内部mmm.present?并且当它不存在时抛出"没有这样的变量".

我相信这有一个共同的模式/解决方案.

Mic*_*ant 25

更改present?!= ''并使用&&运算符,如果第一个表达式为真,则仅尝试计算seond表达式:

if defined?(mmm) && (mmm != '') then puts "yes" end
Run Code Online (Sandbox Code Playgroud)

但实际上到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
Run Code Online (Sandbox Code Playgroud)