Как анализировать хэш символов

#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 , поэтому преобразование не работает.