コマンドライン引数と標準入力の組み合わせについて

Kazunori Kamiya
4 min readAug 12, 2017

--

・Exercise14:プロンプティングとパッシング

ここでは”ARGV”と”gets.chomp”を一緒に使った、ちょっと特殊なエクササイズをやってみましょう。
ここで学んだことは、次のエクササイズでも必要になります。
単に”>”を出力させるのとはちょっと異なる、”gets.chomp”の使い方を見ていきましょう。

我々が必要とするものを設定するための“prompt”という変数を作り、そして”prompt”を何度も入力する代わりに”gets.chomp”に渡します。
もし何か”prompt”を作りたい場合、その部分を変更して再度実行すればいいだけです。

このスクリプト上で最初のコマンドライン引数を得るために、”ARGV.first” を使ったことにも注意しましょう。
前のエクササイズのスクリプトでは、3つの引数を得るために”first, second, third = ARGV”としましたが、それは1つの引数に対しては意味をなしません。
ひとまず、”ARGV.first”を使うのは1つの引数を得る場合、もっとたくさんのコマンドライン引数を得たい場合は他の形を使えばいい、ということを覚えておいてください。
後ほど配列のことを学んだ時に理解できるようになります。

出力結果について

実行すると、以下のようになります。
実行時に、”ARGV”という名前の引数をスクリプトに渡すのを忘れないでください(ARGVに何らかの値を入れてあげるということ)。

学習ドリル

  1. ”Zork and Adventure”というゲームのことを調べてちょっと遊んでみてください。
  2. “prompt”という変数を、何か別のものに変えてみてください。
  3. ここでは引数は1つだけでしたが、前のエクササイズでやったようにもう1つ引数を追加してみてください。”first, second = ARGV”と同じです。
  4. 最後の出力部分で、どのようにして”””を使った複数行の文字列を”#{}”と結合したのか、確実に理解してください。

学習ドリルの答え

  1. https://github.com/devdanrb/zork-rubyからダウンロードして、実行してみました。迷路から脱出するゲームのようですが、上手く脱出できませんでした。。。

2. “prompt”を変更して実行した結果が以下になります。

3. 引数を2つにして実行した結果が以下になります。

ちなみに最初のARGVのところで、下記のように書くとエラーが出ました。

“second”というメソッドは存在しないというエラーが出て、”last”と書き換えると実行できました。

このような書き方をする場合、引数は2つまでしか指定できないものと思われます。
前回のエクササイズでやったように、”first, second, third = ARGV”と書けば何個でも引数を指定できるでしょう。

4. トリプルクォートは、複数行を囲む際に使われます。”#{}”は、文字列補完としての働きを見せます。文字列がプレースホルダーを保持していて、実行時に対応する値に置き替わります。

--

--