2012-02-10 3 views
4

Мне интересно, как передать ложное значение моему скрипту ruby.Передача boolean параметра в 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. 

Могу ли я изменить сигнатуру функции для автоматического скрытого параметра Я к булева ..so, что я не должен делать

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

Как вы ожидаете, что ваша функция будет интерпретировать небулевые строки, такие как '' foo''? –

+0

'foo' явно верен. –

ответ

8

Вы должны оценить аргумент командной строки. Все, что передается в командной строке, это строка, о которой все знают в командной строке.

Например, вы могли бы обезьяна патч String (непроверенные):

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

Или написать утилиту, или используйте параметр командной строки анализатор (долгосрочный лучший выбор), или ...

+1

Ваше регулярное выражение будет соответствовать «неверному»:) ~! Поэтому я рекомендую добавить '^' спереди: '/^(true | t | yes | y | 1) $/i' –

1

Вы не можете передавать объекты из командной строки. Только объект, который вы можете передать, является строкой. Я думаю, в каком-то момент в вашей программе вы должны сделать:

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

В качестве альтернативы, если вы хотите сделать более сложную командную строку разбора с опцией переключателями, в том числе булевых из них, посмотри на Руби встроенного OptionParser.

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 

Это основано на Dave Newton's answer с двумя отличиями:

  1. Больше симметрии - если вы явно с тестами на «истинной» тест, я думаю, вы также должны быть симметричными на " false ".

  2. Просто скажите «нет» /(monkey|duck) p(at|un)ching)/ ключевых классов, таких как String!

Смежные вопросы