【问题标题】:Ruby // Selecting and Transferring items from hashes using InputRuby // 使用输入从哈希中选择和传输项目
【发布时间】: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)

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

感谢您的宝贵时间。

【问题讨论】:

标签: ruby methods hash


【解决方案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 我觉得出于某种原因,新的哈希值可以没有“看到”变量。是否有另一种写法来避免这样的错误?感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2012-01-30
  • 2018-04-24
  • 2017-01-16
  • 2014-06-17
  • 2015-09-26
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多