Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Module | new

概要

Module.new -> Module
Module.new {|mod| ... } -> Module

詳細

無名モジュールを生成する。
ブロックを使用した場合は、生成したモジュールのコンテキストで
ブロック内の処理を実行できる。

サンプルコード
require 'tbpgr_utils'

m = Module.new
print m, "\n"
print m.name.nil?, "\n"

class Hege;end

if rand(2) == 0
  Hoge = m
  m.module_eval do 
    define_method :hoge do
      'hoge'
    end
  end
  class Hege
    include Hoge
  end
else
  Hige = m
  m.module_eval do
    define_method :hige do
      'hoge'
    end
  end
  class Hege
    include Hige
  end
end


bulk_puts_eval binding, <<-EOS
m.name
Hege.ancestors
EOS

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

出力1

#<Module:0x647418>
true
m.name         # => "Hoge"
Hege.ancestors # => [Hege, Hoge, Object, Kernel, BasicObject]

出力2

#<Module:0x1e07410>
true
m.name         # => "Hige"
Hege.ancestors # => [Hege, Hige, Object, Kernel, BasicObject]