#ruby #parsing #hash #command-line-interface #symbols
#ruby #синтаксический анализ #хэш #интерфейс командной строки #символы
Вопрос:
Я попытался downcase
использовать параметр parsed для сопоставления только символов в нижнем регистре, потому что, когда я сопоставляю слово в верхнем ИЛИ смешанном регистре, мой анализатор возвращает нулевое значение.
Я не хочу иметь хэш, подобный [:ens, :ENS, :eNS, :enS ...]
:
opts.on("-i", "--instance [INSTANCE]", [:ens, :etu], "Selectionnez l'instance de Gitlab (etu, ens)") do |instance|
# puts instance.inspect
Options[:instance] = instance
end
Пример:
./gitlabCollect -t my_token -k my_keyword -i ENS
не будет работать, потому что возвращаемый хэш равен:
{:token=>"my_token", :keyword=>"my_keyword", :instance=>nil}
Комментарии:
1. Итак, в чем проблема?
2. Вы можете удалить
[:ens, :etu]
определение параметра from и обработать уменьшение в обработчике.3. Я позволяю двум символам выдавать сообщение об ошибке, когда: экземпляр => ноль
Ответ №1:
Кажется, вы не понимаете некоторых вещей о символах, они сопоставляются с хэшами на основе их символов. :sss != :Sss
. Попробуйте :sss.hash
и :Sss.hash
в irb / pry. Вы увидите, что они сопоставляются с двумя разными числами. Если вам нужно быть неразборчивым в регистре, вы всегда можете преобразовать в строку и upcase
ее.
symbol1 = :sss
symbol2 = :Sss
symbol1.to_s.upcase == symbol2.to_s.upcase #true
Комментарии:
1. Я попытался преобразовать в строку и в нижний регистр, но
Options[:instance] = instance
возвратnil
, поэтому преобразование не работает.