塩焼きブログ

塩焼きに関しての研究内容を公開しています

Rubyでdefined?を利用し変数の存在を確認したり式の種別を確認する

Rubyで変数の存在を確認する時にdefined?を使う。変数が定義されていなければnilが返り、定義されていれば変数の種別が取得できる。

p defined? hello
# nil
hello = "Tom"
p defined? hello
# "local-variable"

未定義の変数に値を代入したいのであれば自己代入||=を使えば良い。変数が存在していなければ変数を代入したいという目的でこのページに訪れた人は参考にされたし。

name ||= "Tom"

defined?を様々なパターンで実行してみる

def hello
  puts "Hello"
end
p defined? hello
# "method"

class Hello
  def initialize
    @name = "Tom"
  end
  def message
    p defined? @name
  end
end

hello = Hello.new

p defined? Hello
p defined? hello
p defined? hello.message
hello.message
# "constant"
# "local-variable"
# "method"
# "instance-variable"

hello = []
p defined? hello
# "local-variable"

hello = {a: 10, b: 20}
p defined? hello
# "local-variable"

defined?が返す値の一覧はRuby 1.9.3 リファレンスマニュアルで紹介されている クラス/メソッドの定義