Techioz Blog

Rubyでブールパラメータを渡す

概要

Ruby スクリプトに false 値を渡すにはどうすればよいでしょうか。

私が呼び出した場合:

ruby myscript.rb false

そして、スクリプトで次のように言うとします。

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

基本的に、値「false」を持つ文字列が渡されます。はっきり言えば

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

パラメータをブール値に自動変換するように関数のシグネチャを変更できますか?そうする必要がありません

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

解決策

コマンドライン引数を評価する必要があります。コマンドラインで渡されるものはすべて文字列であり、コマンドラインが認識できるのはそれだけです。

たとえば、文字列にモンキーパッチを適用できます (未テスト)。

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

または、ユーティリティを作成するか、コマンドライン オプション パーサーを使用するか (長期的な最善策)、または…