ruby内で、selfは基本的に省略可能なのですが、
self.hoge = "hoge"
のように、"=" 付きのメソッドの時はselfの省略ができません。省略した場合は、ローカル変数への代入となります。
とすると、下記のような時、どちらの値が出力されるのでしょうか。
self.hoge = "self" hoge = "local" p hoge
試してみました。
class Hoge def initialize @hoge = nil end def hoge @hoge end def hoge=(val) @hoge = val end def local_and_self self.hoge = "self" hoge = "local" p hoge p self.hoge end def self_only p hoge end end hoge = Hoge.new p "local_and_self" hoge.local_and_self p "self_only" hoge.self_only
実行結果
ruby hoge.rb
"local_and_self"
"local"
"self"
"self_only"
"self"
というわけで、ローカル変数が設定されている場合はそちらが優先になるみたいです。