gpt4 book ai didi

ruby - gets 方法的 YAML::Load(contents) 问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:21 25 4
gpt4 key购买 nike

我有一个名为“contents.txt”的文件,其中包含 YAML 格式的文本。

我将其作为 ruby Minesweeper.rb contents.txt

在命令行中传递

然后,我有一个加载函数:

def self.load
grid = YAML::load(File.open(ARGV[0]))
grid
end

在我的主 play 循环中,我使用命令 input = gets.chomp

从用户那里获取输入

问题是,在我可以从用户那里获取任何输入之前,我得到了一个错误,因为输入没有从用户那里得到任何东西。相反,它获取文件的每一行并通过循环运行,直到出现错误,因为我的代码未配置为运行随机输入,例如来自文件的输入。

这是我不知道的 YAML::load 的一些副作用吗?我怎样才能克服这个问题?

最佳答案

Ruby 中大多数看起来像普通函数的东西实际上是来自 Kernel 的方法,特别是,当你说 s = gets 时,你实际上是在调用 内核#gets。来自fine Kernel manual :

gets(sep=$/) → string or nil
gets(limit) → string or nil
gets(sep,limit) → string or nil

Returns (and assigns to $_) the next line from the list of files in ARGV (or $*), or from standard input if no files are present on the command line.

因此 gets(不在 IO 实例中)将按设计从命令行中提到的文件中读取。这样做是为了更容易编写命令行过滤器和一次性 ruby -e 脚本,例如,您可以说 grep pancakes 来搜索文件 grep 搜索标准输入。

如果你想从标准输入读取那么你应该这样说:

input = $stdin.gets.chomp

关于ruby - gets 方法的 YAML::Load(contents) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com