2012-02-10 10 views
4

ruby​​スクリプトにfalse値を渡すにはどうすればいいですか?ruby​​でブール型パラメータを渡す

私が起動する場合:私のスクリプトで

ruby myscript.rb false 

、その後の私が言う場合:

my_class.new(*ARGV) 
or my_class.new(ARGV[0]) 

基本的に値を持つ文字列が "偽" が渡されます。私は

if(ARGV[0]){ do something} .. this gets executed even if value passed is false. 

を言えば明らかに私は、私はあなたがコマンドライン引数を評価する必要が

if(ARGV[0]=='true') 
+0

あなたの関数が '' foo''のような非ブール型文字列をどのように解釈すると思いますか? –

+0

'foo'は明らかに真です。 –

答えて

8

を行うには持っていけないということ..soブールするために、自動秘密PARAMTERに私の関数のシグネチャを変更することができます。コマンドラインで渡されたものはすべて文字列であり、それはすべてのコマンドラインが知っているものです。例えば

、あなたは可能性が猿パッチ文字列(未テスト):

class String 
    def to_b 
    self =~ /^(true|t|yes|y|1)$/i 
    end 
end 

またはユーティリティを書き、またはコマンドラインオプションパーサ(長期の最善の策)を使用するか、または...

+1

あなたの正規表現は「真実」とマッチします:)〜!そこで、前に '^ 'を追加することをお勧めします:'/^(true | t | yes | y | 1)$/i' –

1

コマンドラインからオブジェクトを渡すことはできません。あなたが渡すことができるオブジェクトだけが文字列です。あなたはブールのものを含むオプションスイッチ、で解析するより洗練されたコマンドラインを実行したい場合は、Rubyの組み込みのOptionParserを見て、また

if(ARGV[0]=='true') 
2

:私は、あなたがしなければならないあなたのプログラムの中でいくつかの点で推測します。

3
def to_b(string) 
    case string 
    when /^(true|t|yes|y|1)$/i then true 
    when /^(false|f|no|n|0)$/i then false 
    else raise "Cannot convert to boolean: #{string}" 
    end 
end 

これは、2つの違いをDave Newton's answerに基づいています。

  1. より対称性 - あなたが「本当」の試験での試験と明示している場合、私はあなたにも「上対称的であるべきだと思います偽のテスト。

  2. Stringのようなキークラスを/(monkey|duck) p(at|un)ching)/にしてください。

関連する問題