【问题标题】:How to parse on a hash of symbols如何解析符号哈希
【发布时间】:2017-02-19 23:18:17
【问题描述】:

我尝试 downcase 解析选项以仅匹配小写格式的符号,因为当我匹配大写或混合大小写的单词时,我的解析器返回 nil 值。

我不想拥有像 [: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}

【问题讨论】:

  • 那么,这里有什么问题?
  • 您可以从选项定义中删除[:ens, :etu] 并在处理程序中处理小写。
  • 我让两个符号在 :instance => nil 时抛出错误消息

标签: ruby parsing hash command-line-interface symbols


【解决方案1】:

您似乎不了解符号的某些内容,它们根据其字符映射到哈希值。 :sss != :Sss。在 irb/pry 中尝试 :sss.hash:Sss.hash。您将看到它们映射到两个不同的数字。如果需要不区分大小写,可以随时转换为字符串并upcase

symbol1 = :sss
symbol2 = :Sss

symbol1.to_s.upcase == symbol2.to_s.upcase #true

【讨论】:

  • 我尝试转换为字符串和小写但Options[:instance] = instance 返回nil 所以转换不起作用。
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 2012-02-22
  • 2012-01-26
  • 2012-12-13
  • 1970-01-01
  • 2013-02-04
  • 2014-07-10
  • 2017-05-28
相关资源
最近更新 更多