1. 小文字(a,b..)で始まっていますか?
を。Ruby はそれがローカル変数かどうかをチェックします。
b. Ruby はメソッドかどうかをチェックします。
c. Ruby は method_missing を呼び出します
2. 大文字(A,B..)で始まりますか?
を。Ruby は定数かどうかをチェックします。
b. Ruby は const_missing を呼び出します
3. メソッド呼び出し(object.method)ですか?
を。
Ruby はメソッドbかどうかをチェックします。Ruby は method_missing を呼び出します
したがって、オブジェクトの外側(steenslagが言ったように)rubyは3を行い
ます。オブジェクト/クラス定義の内側では、1/2になります:
class E
def a()
'a'
end
def get_a()
a=42
puts a
end
end
E.new.get_a() #42
しかし、この場合:
class A
a=42
def get_a()
a
end
end
A.new.get_a() # NameError: undefined local variable or method `a' for #<A:0x3820368>
変数aはA のあるバージョンに属しているため、クラス A のインスタンスとクラス A 自体は、クラスを宣言した後、 a について認識しません。