Just do IT

思うは招く

Rubyのライブラリの名前だけを取り出す Ruby基礎#25

お題

  • 変数$:にはRubyが利用するライブラリが置かれているディレクトリの名前が配列の形で格納されている
  • この変数を使い、RUbyが利用できるライブラリのファイル名を順に出力せよ

「たのしいRuby 第6版 P.410」より

回答

カンニングしてしまった...)

$:.each do |path|
  next unless FileTest.directory?(path)
  Dir.open(path) do |dir|
    dir.each do |name|
      if name == /\.rb$/i
        puts name
      end
    end
  end
end

説明

ファイルパスが入ってる$:配列をeachメソッドで回す。ブロック引数にはそれぞれのパスが入る。

unlessはifの反対で、条件式が偽なら実行される。ifは条件式が真なら実行される。 nextは、繰り返しを制御する命令のひとつで、「次の回の繰り返しに処理を移す」という意味。

FileTest.directory?は引数がディレクトリならtrue、ディレクトリじゃないならfalseを返す。ここではディレクトリじゃないものを排除している。 つまり、FileTest.directory?でディレクトリじゃないものはfalseが返るので、それをnextで排除する感じ。

Dir.openにパスを渡し、ディレクトリ内のファイルのファイル名を取得している。

以下の正規表現は、「.rbで終わるファイル」という意味。$は「行末とマッチするパターン」を表す。iはアルファベットの大文字と小文字の違いを無視する。

/\.rb$/i

学び

そもそもライブラリをあまり入れてなかったので結果は表示されなかった。

docs.ruby-lang.org