2016-10-31 11 views
-2

私はRubyスクリプトを開発しました。それらのそれぞれは「自己完結型」でなければならないので、ユーザーはそれを単独で実行することができます。しかし、私はそれらを使って他のスクリプトを作りたいと思っています。例えば、そのメソッドを使うだけでなく、 `script.rb`を実行することなく全体を実行することを意味します。Rubyでのスクリプト作成

私が今まで持っていたのは、クラスがなくてもちょうど2つのスクリプト(別々のファイル)です。ユーザー入力を受け取り、それらのメソッドを実行する処理は、どの関数の外にもあります。私はこのモデルが正しくないかもしれないと思う。

私の質問は、すべてのスクリプトを自己完結した状態に保つために、他のスクリプトが使用できるようにするにはどうすればよいですか。すべてのスクリプトには、私が実行するメインメソッドのクラスが含まれているだけでしょうかobject.main

多分私のアプローチでは簡単なスクリプトを書くことができますが、クラスはありません。

新しいスクリプトを作成する場合、私はいつも客観的に行くべきですか?

+0

あなたの質問は、それに関連のない2つの質問があります。 「[ask]」をお読みください。質問が密接に関連している場合は、より受け入れられるでしょうが、無関係な質問は、他者を助けるときにあなたの質問の有効性を薄くします。 –

答えて

1

私はスクリプトから1つ書きますが、私はしばしばそれをクラスでラップします。あなたは、再利用とよりクリーンな文書化を含むこれを行ういくつかの利点を指摘しました。

スクリプトの使用方法に応じて、いくつかのレベルのポリッシュがあることがわかりました。スクリプトが一度実行され、再度使用されることがない場合は、クラス内でラップすることはできません。それが重要な場合(プロダクションシステムのバックアップを取る)、それは完全な宝石の形とテストを書く価値があるでしょう。真ん中のどこかが、単一の目的のクラスです。一般的に、これはメソッドにないコードをクラスコンストラクタに入れていることを意味します。

この:

#!ruby 

def amethod(i) 
    i+1 
end 

ARGF.each do |l| 
    if l.chomp.to_i > 0 
     puts amethod(l.chomp.to_i) 
    end 
end 

は次のようになります。

#!ruby 

class OneAdder 
    def amethod(i) 
     i+1 
    end 

    def initialize 
     ARGF.each do |l| 
      if l.chomp.to_i > 0 
       puts amethod(l.chomp.to_i) 
      end 
     end 
    end 
end 

OneAdder.new 
+0

あなたの宝石は何を含んでいますか? OneAdderクラスのみ、またはクラス全体のセット? – damian

関連する問題