読者です 読者をやめる 読者になる 読者になる

タグ屋さんの平台

開発した商品のリリースとアナウンスをします。

Ruby におけるARGF と ARGV について

るびまサーチから検索してみます。

「ARGF」

(m:Kernel::ARGV を参照) をファイル名とみなして、

それらのファイルを連結した 1 つの仮想ファイルを表すオブジェクトです。

ARGV が空なら標準入力を対象とします。

ARGV を変更すればこのオブジェクトの動作に影響します。

while line = ARGF.gets

....

end

は、

    while argv = ARGV.shift

      File.open(argv) {|file|

        while line = file.gets

....

end

}

end

のように動作します。

ARGF を処理するごとに ARGV の要素は一つずつ取り除かれます。

最後まで ARGF を読み込んだ後、再度 ARGF から内容を読むと

(ARGV が空なので)標準入力からの読み込みとなります。

「ARGV」

Kernel:ARGV

--- ARGV -> Array

Ruby スクリプトに与えられた引数を表す配列です。

組み込み変数 m:$* の別名です。

Ruby 自身に対する引数は取り除かれています。

例:

スクリプト argv.rb の内容が

p ARGV

であったとします。このときシェルから次を実行すると、

    $ ruby argv.rb foo bar baz

結果は以下のように出力されます。

    ["foo", "bar", "baz"]

 

zinbeiを例とするなら、

ARGF を実行待ち状態として、

正規表現を使いマッチする文字列のとき、

出力するように書き、

止めるときは Ctrl-C を使うと表示する。

ARGV を使いシェルのあとの文字列に、

正規表現がマッチするとき出力をするように書く。

これで、zinbeiC が実行待ちになるのと、

zinbei にシェルのあとに文字列をつけると、

出力されたのがわかるだろう。

 

ARGFを使えば、

Rubyで作る奇妙なプログラミング言語

にあった言語処理系を実装することが可能であり、

 

ARGVを使えば、

シェルのあとの文字列で、

オプションなどの処理系の追加が可能だ。

 

この ARGF と ARGV の違いを覚えておこう。

 

引用サイト

http://doc.ruby-lang.org/ja/1.9.3/doc/index.html

http://doc.ruby-lang.org/ja/search/

Copyright © 2007-2017 Takayuki Kamiyama. All Rights Reserved.