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 哈希和/或数组?