Передача логического параметра в ruby - PullRequest
5 голосов
/ 11 февраля 2012

Мне интересно, как передать ложное значение в мой скрипт ruby.

Если я вызову:

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')

Ответы [ 4 ]

9 голосов
/ 11 февраля 2012

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

Например, вы можете выполнить Monkey-patch String (не проверено):

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

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

3 голосов
/ 13 августа 2012
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

Это основано на ответе Дейва Ньютона с двумя отличиями:

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

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

2 голосов
/ 11 февраля 2012

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

1 голос
/ 11 февраля 2012

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

if(ARGV[0]=='true')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...