Posted at

Rubyのモジュール内でextend self

More than 5 years have passed since last update.

defunkt/gistを読んでいたら,gist.rbに以下の記述を見つけた.


gist.rb

module Gist

extend self
# ...
def write(files, private_gist = false, description = nil)
# ...
end

extend selfでのレシーバーはGistなので,Gistモジュールの特異クラス(Gistクラス)に,selfで定義されているメソッド(つまりextend self以降で定義しているGistモジュールのメソッド.上記のwriteなど)を定義するということみたい.

結果Gist.writeのように呼び出すことが出来るようになる.