Rubyの継承
スーパークラスのメソッドを継承する際の引数で混乱したので、自分なりにまとめてみた。
class Sup attr_reader :x def initialize #引き継がれない @x=4 end def initialize(x) @x=x-3 end end class Sub < Sup attr_reader :y def initialize(y) super @y=y end end obj=Sub.new(6) p obj.x #=> 3 p obj.y #=> 6
引数なしのinitializeを呼んだつもりだったのだが、どうやらsuperは引数をそのまま渡しているみたいだ。
引数を渡す
class Sup attr_reader :x def initialize @x=4 end def initialize(x) @x=x-3 end end class Sub < Sup attr_reader :y def initialize(y) super(3) #任意の引数でinitializeを呼べる @y=y end end obj=Sub.new(6) p obj.x #=>0 p obj.y #=>6
引数なしのsuperだとサブクラスの引数がそのまま渡されるみたい
しかしここで super()にするとエラーが出る。扱いが違うのか
ということでデフォルト引数を設定してみる
class Sup attr_reader :x def initialize(x=4) #デフォルトで引数を設定しておく @x=x end end class Sub < Sup attr_reader :y def initialize(y) super() @y=y end end obj=Sub.new(6) p obj.x #=>4 p obj.y #=>6
うまくいった。スマートな方法かわからないけど
■
Carbon Emacsの設定をごりごりやり過ぎたせいで、しばらくまともに
mac-key-modeが動かないのは辛い
$ emacs --debug-init