const_missing的用途

const_missing這個method會在直譯器找不到某個常數的時候被呼叫,舉例來說

class Module
 def const_missing(sym)
 puts "Can't find constant #{sym}"
 end
end

A
#=> Can't find constant A

至於用途呢?這讓我們可以直接在程式碼中使用一些文字而不用事先定義,在設計DSL的時候相當方便。

另外一種用途如下:


class Module
  def const_missing(sym)
    #當出現沒有定義的常數時,就把以那個常數為名的檔案require進來
    require sym.to_s
    #最後回傳該常數的值
    const_get(sym)
  end
end

#將資料夾底下所有ruby檔引用進來,配合上面的設定,會順著整個繼承體系將所有需要的檔案都require!
Dir.glob('*.rb').each { |file| require file unless file == 'Main.rb' }
Advertisements

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s