web-dev-qa-db-ja.com

「未定義のローカル変数またはメソッド」がない値を持つ変数が存在するかどうかを確認するにはどうすればよいですか?

これは一般的なパターンです。変数が存在しない場合、undefined local variable or methodエラー。

既存のコードにはif variable_name.present?しかし、これは存在しない変数を考慮していませんでした。

変数の値を確認し、変数がまったく存在しないことを説明するにはどうすればよいですか?

私はもう試した:

if (defined? mmm) then
  if mmm.present? then
    puts "true"
  end
end

しかしRubyはまだその内部をチェックしますmmm.present?が存在しない場合は、「そのような変数はありません」をスローします。

これには共通のパターン/解決策があると確信しています。

17
Michael Durrant

変更 present?から!= ''そして、&&演算子を使用して、最初の式がtrueの場合にのみ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
27
Michael Durrant

On Ruby on Rails

if defined?(mm) && mm.present?
  puts "acceptable variable"
end

IRBについて

if defined?(mm) && !mm.blank? && !mm.nil?
  puts "acceptable variable"
end

未定義の変数、nil、空の値を取得しないようにすることができます。

3
Komsun K.