0

私はかなり単純なスクリプトを持っており、コマンドラインまたはファイルから渡されたデータを取り込んでから、最初のコマンド(コマンドラインからのデータの場合はARGV [0])に依存する必要があります。スクリプト内の唯一のクラスの新しいインスタンスをインスタンス化するか、クラスの既存のインスタンスの属性を変更してから、入力データの反復処理が完了した後に何が起こったかの概要を出力します。

ファイルの場合は自分が何をしているのかはわかっていると思いますが、コマンドラインからデータを渡すときにこれを行う方法に少しこだわっています。

たった1つのデータで、次のことを実行できます。

ruby filename.rb command1 command2 command3

そして、私のスクリプト内には、次のようなものがあります

instance = ClassName.new(ARGV[0], ARGV[1], ARGV[2])

..しかし、この状況では、これら3つのコマンドのいくつかのセットに対してそれを実行できるようにしたいと思います。だから次のようなもの:

ruby filename.rb command1 command2 command3
ruby filename.rb anothercommand1 anothercommand2 anothercommand3

..そして、すべてのデータが入るまで繰り返してから、summaryメソッドを呼び出します。これを実装する方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

0

私があなたが何をしたいのかを正しく理解した場合:

ARGV.each_slice(3) { |a1, a2, a3|
  # NB: a2 and/or a3 may be nil here if ARGV.size % 3 ≠ 0
  puts "#{a1}×#{a2}×#{a3}"
}
puts "Init NOW"

降伏:

~ ruby a.rb arg1 arg2 arg3 arg4 arg5 arg6 arg7
# arg1×arg2×arg3
# arg4×arg5×arg6
# arg7××
# Init NOW

タスクの明確化後のUPD :

class Operator
  attr_accessor :a1, :a2, :a3, :a4 
  def initialize attrs
    @a1, @a2, @a3, @a4 = attrs
  end 
  def begin
    puts "[BEGIN] ⇒ 1: #{@a1}, 2: #{@a2}, 3: #{@a3}"
  end 
  def add 
    puts "[ADD]   ⇒ 1: #{@a1}, 2: #{@a2}, 3: #{@a3}, 4: #{@a4}"
  end 
  def subtract
    puts "[SUBTR] ⇒ 1: #{@a1}, 2: #{@a2}, 3: #{@a3}, 4: #{@a4}"
  end 
end

meth, *args = ARGV

Operator.new(args).send (meth.to_sym)

これは次のようになります。

~ ruby a.rb add arg1 arg2 arg3 arg4
# [ADD]   ⇒ 1: arg1, 2: arg2, 3: arg3, 4: arg4
~ ruby a.rb begin arg1 arg2 arg3
# [BEGIN] ⇒ 1: arg1, 2: arg2, 3: arg3
于 2013-03-01T16:55:38.510 に答える