Ruby // 使用输入从哈希中选择和传输项目

Posted

技术标签:

【中文标题】Ruby // 使用输入从哈希中选择和传输项目【英文标题】:Ruby // Selecting and Transferring items from hashes using Input 【发布时间】:2021-12-17 05:14:48 【问题描述】:

我正在使用 Ruby 制作一个基本的 CLI web scraper。将询问用户他们想查看哪个股票指数。他们的输入将被视为:

$input = gets.chomp.downcase.to_s

我有一个哈希值,用作临时数据库。我知道这不是最佳做法,但这是我仅使用 Ruby 对象提出的最佳做法。

示例哈希:

index_info_resource = 
   "dax" => 
      full_name:  "Deutscher Aktienindex (German stock index)",
      exchange:   "Frankfurt Stock Exchange"
      web_site:   "investing.com/dax/test
   ,
   "fchi" => 
      full_name:  "Cotation Assistée en Continu",
      exchange:   "Euronext Paris"
      web_site:   "investing.com/fchi/test
   

因为会有一个 scraper 类,信息将来自那里以及来自这个 db 哈希,我正在考虑制作一个暂存哈希:@@requested_index = Hash.new 然后我将在其中添加信息我需要这样:

@@requested_index[:full_name] = index_info_resource["#"dax""][:full_name]

我的问题是,当我以这种方式使用用户输入时:

@@requested_index[:exchange] = index_info_resource["#"$input""][:full_name]

我收到此错误:

undefined method `[]' for nil:NilClass (NoMethodError)

我不知道为什么或如何解决这个问题。如果我只使用相同的字符串,它就可以工作。如果用户输入的是同一个字符串,则不是。

感谢您的宝贵时间。

【问题讨论】:

看看YAML::Store,这是一种将哈希保存到文件ruby-doc.org/stdlib-2.4.0/libdoc/yaml/rdoc/YAML/Store.html的内置方法 【参考方案1】:

您的$input 已经是一个字符串,因此在这种情况下您不需要字符串插值。此外,"#"$input"" 将评估为 "$input" 而不是该变量的值。

只是改变

@@requested_index[:exchange] = index_info_resource["#"$input""][:full_name]

@@requested_index[:exchange] = index_info_resource[$input][:full_name]

【讨论】:

我试过了/刚刚又试了一次。它仍然给我:未定义的方法 `[]' for nil:NilClass (NoMethodError) 当我将 `test = "dax" ` 放在 @@requested_index[:exchange] = index_info_resource[test][:full_name] 上方时,它可以工作。但是如果我设置 test = $input 它不再工作,我得到同样的错误。看不到$input会有什么原因吗? 当你在上面调用puts $input.inspect时输出是什么? 当我在命令行中输入 dax 时,它会输出:=> "dax" 另外,当我执行 puts $input.class 时,我得到: => String 我觉得出于某种原因,新的哈希值可以没有“看到”变量。是否有另一种写法来避免这样的错误?感谢您的帮助。

以上是关于Ruby // 使用输入从哈希中选择和传输项目的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试从 ruby​​ on rails 上的表单获取输入时,我得到了简单名称的哈希数组瞬间。如何解决?

将项目添加到哈希意外?

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

Powershell 和 Ruby 中不同的 SHA1 哈希结果

从 Ruby 哈希中转移一个特定的匹配键值对

Rails:如何将对象数组的哈希转换为 json