4

やりたいputs blob

しかし、blob 変数が存在しない場合は、

NameError: undefined local variable or method `blob' for main:Object

私はもう試した

blob?  
blob.is_a?('String')
puts "g" if blob  
puts "g" catch NameError
puts "g" catch 'NameError'

しかし、どれも機能しません。

@instance 変数を使用して回避することはできますが、値がないという問題について知って対処する必要があるため、不正行為のように感じます。

4

2 に答える 2

13

この場合、次のことを行う必要があります。

puts blob if defined?(blob)

または、nil もチェックしたい場合は、次のようにします。

puts blob if defined?(blob) && blob

このdefined?メソッドは、引数が定義されている場合はその型を表す文字列を返し、nilそうでない場合は返します。例えば:

defined?(a)
=> nil
a = "some text"
=> "some text"
defined?(a)
=> "local-variable"

これを使用する典型的な方法は、条件式を使用することです。

puts "something" if defined?(some_var)

詳細についてdefined?は、この質問を参照してください。

于 2012-06-20T14:29:58.460 に答える
0
class Object
  def try(*args, &block)
    if args.empty? and block_given?
      begin
        instance_eval &block
      rescue NameError => e
        puts e.message + ' ' + e.backtrace.first
      end
    elsif respond_to?(args.first)
      send(*args, &block)
    end
  end
end

blob = "this is blob"
try { puts blob }
#=> "this is blob"
try { puts something_else } # prints the service message, doesn't raise an error
#=> NameError: undefined local variable or method `something_else' for main:Object
于 2012-06-20T15:02:29.893 に答える