ナスカブログ

未来の自分へのドキュメント

Ruby Goldへの道 day7

以下のサイトでruby gold取得に向けて毎日一回Goldチャレンジを行い間違えた問題を簡単にまとめる。 rex.libertyfish.co.jp

7日目 得点 76点/100点中

初の合格点。この調子で理解を深めていこう。 今日も間違えた中から数問深掘りする

  • aliasとalias_method
    • alias 新メソッド 旧メソッド  の形で記述する。" , " は不要。
    • alias_method :新メソッド, 旧メソッド の形で記述する。 " , " は必要。シンボル 型で記述できる
class String
  # aliasの場合 新メソッド 旧メソッド の形で記述する , はいらない
  alias hoge reverse

  # alias_methodの場合 :新メソッド, :旧メソッド の形で記述する
  alias_method :hoge, :reverse  
end

p "12345".hoge
  • prepend
    • モジュールのメソッドを特異メソッドとして追加する
    • メソッドの探索はselfより前に行われる
    • 複数個記述した場合は左から探索される
module M1
end

module M2
end

class C
  prepend M1, M2
  # selfより先に探索される。左から順に探索される。
end

p C.ancestors #=> [M1, M2, C, Object, Kernel, BasicObject]
  • includeはmoduleのインスタンスメソッドをMix-inする
  • C.methodsはCの特異メソッドを表示する
module M
  def self.class_m
    "M.class_m"
  end
end

class C
  include M
  # MモジュールのインスタンスメソッドをMix-in
end

p C.methods.include? :class_m #=> false
# Cにはclass_mは追加されない

今日はこの辺で、、 メタプログラミングRuby読みながら問題で気になった箇所を深掘り、なかなかハマってる気がする。