rspec问题被认为与gets.chomp调用

时间:2016-11-12 21:36:13

标签: ruby input rspec gets

运行时遇到问题或者与rspec错误混淆:

rspec -fd game_spec

respec error messaage

(以上只是长期恐怖信息的开头)

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

user interface with issue rspec file

2 个答案:

答案 0 :(得分:2)

原因是getsARGV(参数变量)读取,例如您-fd提供的rpsec标记。

您可以非常轻松地重新创建这种情况:

> 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>'

您可以在致电ARGV

之前清除gets.,以防止这种情况发生
> 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

答案 1 :(得分:0)

我知道这个问题已经回答。我也是Ruby的新手,但本教程使用的是这种方式。它使用了$stdin.gets.chomp

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

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