Rubyのレキシカル変数むずかしい
同じシンボルの参照でも、代入(宣言)前後で参照しているものがまったく違うものになるのがPerlと違って難しい。
class Base def initialize self.foo = "init" end def foo=(value) @foo = "<#{value}>" end def foo @foo end end class Derived < Base def f # selfがないとメソッド呼び出しと変数参照は同じに見える puts "In f()" p foo # Base#foo() p foo = 2 # レキシカル変数の宣言 p foo # fooはレキシカル変数 end def g # self付きだと常にメソッド puts "In g()" p self.foo p self.foo = 2 p self.foo end end d = Derived.new d.f d.g
出力:
In f() "<init>" 2 2 In g() "<init>" 2 "<2>"