class Hoge attr_accessor :fuga def piyo fuga = "overwrite" if fuga.nil? fuga end end hoge = Hoge.new hoge.fuga = "fuga" hoge.piyo この時の hoge.piyo の結果はどうなると思いますか? まともなRubyistであれば、分かると思いますが僕にとっては予想外の結果でした。 僕はこのコードを最初に見たときにパッと思った答えは fuga が返ってくるんじゃないかと思いました。が、実際の答えは overwrite です。なぜでしょうか。その理由を探るためにRubyの仕様を確認してみると、とても面白かったのでまとめてみました。 (注) attr_accessor で定義したインスタンス変数にアクセスするのに @ がないのがそもそもオカシイというツッコミは一旦置いといて