いきなり変数を評価

なんのことを言っているのかというと、

class Jikken
  def jikken
    return @@jikken if @@jikken
    @@jikken=Time.now.to_i
    @@jikken
  end
end
j=Jikken.new
p j.jikken

このコードを実行するとエラーが起きます。

@@jikken=nil

を入れて、以下のように書くとうまくいきます。

class Jikken
  def jikken
    return @@jikken if @@jikken
    @@jikken=Time.now.to_i
    @@jikken
  end
  @@jikken=nil
end
j=Jikken.new
p j.jikken

どうもインスタンス変数以外は例外が起きてしまうようです。
知らなかった。
いきなり評価できた変数

いきなり評価すると例外が起きる変数

  • aaa(ローカル変数)
  • @@aaa(クラス変数)
  • Aaa(定数)