rspec 问题据信与 gets.chomp 通话有关

rspec issue believed to be with gets.chomp call

当 运行ning:

时,我遇到了问题或对 rspec 错误感到困惑
rspec -fd game_spec

(以上只是一条长错误信息的开头)

当我 运行 它没有 -fd 时,它可以工作......但它看起来很愚蠢......出了点问题。我在使用 gets.chomp 时开始收到错误消息,但我查看了使用它的类似示例。 'the_word' 是否必须在初始化时设置? gets.chomp 可以吗?我感谢任何帮助。以下是游戏文件及其目前的 rspec。我根本不想改变太多。我只想得到我目前所做的工作并继续前进。谢谢!

原因是gets读取自ARGV(参数变量),比如你给rpsec-fd标志。

您可以很容易地重现这种情况:

> ruby -e "puts gets.chomp" ASD
-e:1:in `gets': No such file or directory @ rb_sysopen - ASD (Errno::ENOENT)
    from -e:1:in `gets'
    from -e:1:in `<main>'

您可以通过在调用 gets.

之前清除 ARGV 来防止这种情况发生
> ruby -e "ARGV.clear; puts gets.chomp" ASD
asd # <-- I then type this
asd # <-- and this is printed

你不能只说 ARGV = [] 因为它是一个常量,但是调用 clear 是可以的,因为它没有重新定义变量。

简而言之,把这个放在gets.chomp之前的某个地方:

ARGV.clear

这是关于该主题的另一个问题:Ruby readline fails if process started with arguments

我知道这个问题已经得到解答。我也是 Ruby 的新手,但是教程是这样使用的。它使用了$stdin.gets.chomp

因此您的代码将是 game.the_word = $stdin.gets.chomp

根据我的研究,gets.chomp 将首先检查 ARGV 中的内容,如果未找到任何内容,则使用标准输入。这样做将直接读取用户输入。 :)