Hatena::Grouprubyist

Ruby初心者prinyの学習帳 RSSフィード

2009-02-03たのしいRuby P.306 (1)

$: には、Ruby が利用するライブラリが置かれているディレクトリの名前が
配列の形で格納されています。
この変数を使って、Ruby が利用できるライブラリのファイル名を
順に出力するメソッド printLibrary メソッドを定義しましょう。

Ruby が利用できるライブラリのファイル名」ってどういう意味なんだろ?基礎知識が足りなくて、こんなところでも詰まる。

Ruby 1.8.7 リファレンスマニュアルの variable $-I にこんな記述があったのだけど、

require 'foo' を実行すると、以下のように foo.rb と foo.so が交互に探索されます。 

ライブラリを require したときに拡張子が rb のものと so のものを探す、ということは、それらが「Ruby が利用できるライブラリのファイル名」なんだろうか。

とりあえず、Ruby が利用するライブラリが置かれている、カレントディレクトリ以外のディレクトリの名前を表示して、さらに、そのディレクトリ以下に拡張子が rb、so のファイルがあったら、それらのファイルの名前も表示するようにする。

書いたもの

def print_library
  $:.each{|path|
    next unless FileTest.directory?(path)
    next if path == "."
    puts path
    Dir.foreach(path) {|name|
      if name =~ /\.rb$/i || name =~ /\.so$/i
        puts "|--" + name
      end
    }
    puts
  }
end

print_library

実行結果

C:/ruby187/lib/ruby/site_ruby/1.8

C:/ruby187/lib/ruby/site_ruby/1.8/i386-msvcrt

C:/ruby187/lib/ruby/site_ruby

C:/ruby187/lib/ruby/vendor_ruby/1.8

C:/ruby187/lib/ruby/vendor_ruby/1.8/i386-msvcrt

C:/ruby187/lib/ruby/vendor_ruby

C:/ruby187/lib/ruby/1.8
|--abbrev.rb
|--base64.rb
|--benchmark.rb
(長いので省略)
|--weakref.rb
|--webrick.rb
|--yaml.rb

C:/ruby187/lib/ruby/1.8/i386-mswin32
|--bigdecimal.so
|--curses.so
|--dbm.so
(長いので省略)
|--Win32API.so
|--win32ole.so
|--zlib.so

つくろうとしたものはできた、と思う。

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/priny/20090203