🙄

Rubyのクラスメソッド中でインスタンス変数を参照するとnil となる

2023/04/07に公開1

Rubyのクラスメソッド中でインスタンス変数を参照するとnilとなります。変数を初期化していないことが理由です。

ソースコード

# frozen_string_literal: true

class Klass
  attr_reader :n

  class << self
    def show
      pp @n
    end
  end

  def initialize
    @n = 2
  end
end

klass = Klass.new
pp klass.n # 2

Klass.show # nil

実際にKlass.showを実行するとnilが返ってきます。

Discussion

原子軌道@ピザを食べたい原子軌道@ピザを食べたい

日を変えて改めて考えると、クラスメソッドはオブジェクトを作成しないので、インスタンス変数が初期化されないのは当然ですねっ