u16suzuの blog

日々学んだことのメモブログです。

2016/7/27の日記

Rubyのメソッドに関する雑多なメモ

<< # 右ビットシフト `*2` と同じ意味
>> # 左ビットシフト `/2` と同じ意味
| # 論理和演算子. 0011|0101 => 0111
8.to_s(2) #=> "1000" : 2進数表現の文字列を取得
"0x4d2".hex #=> 1234 : 16進数を10進数に変換. 0xはなくてもあっても良い.

super

Rubyのsuperはオーバーライドしているメソッドを呼び出す. 注意点として、引数を省略してsuperとコールすると、全ての引数を受け渡してコールしてしまう. super() と明示的に()をつけてコールすると、引数を渡さない. このことは Effective Ruby でも書かれていた.

Effective Ruby

Effective Ruby

クラスマクロを自分で定義してみる.

クラスマクロを使うことで、 attr_accessor みたいなメソッドを定義できる. 完全にクラスメソッドだけど、こういう attr_accessorっぽい宣言的な構文で記述が出来る奴をクラスマクロと言うらしい. Railshas_many, belongs_to もクラスマクロだ.

class User
  attr_accessor :name

  def self.attr_special_accessor( *key )
    p key
  end

  def self.before_hoge_hoge(key)
    p key
  end

  def self.after_hoge_hoge(k)
    p k
  end
end

class Boy < User
  attr_special_accessor :name, :age
  before_hoge_hoge :foo
  after_hoge_hoge :bar
end

このQiitaの記事がとても参考になった.