2016-11-12 49 views
0

我有麻烦或感到困惑与rspec的错误运行时:认为rspec的问题与gets.chomp呼叫

rspec -fd game_spec 

respec error messaage

(以上仅是一个长eror的开始消息)

当我运行它没有-FD,它的工作原理......但它看起来愚蠢......有些事情是错误的。当我使用gets.chomp时,我开始收到错误信息,但是我看过使用它的类似示例。 'the_word'是否必须在初始化时设置? gets.chomp还是可以的?我感谢任何帮助。以下是游戏文件及其rspec。我根本不想改变太多。我只想得到我迄今为止的工作,并继续努力。谢谢!

user interface with issue rspec file

+0

顺便说一下,这是preferrable一个代码块添加到这个问题,而不是使用屏幕截图 –

回答

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

+0

非常感谢。那么你究竟把它放在哪里呢?喜欢这个? '代码'提出“请战略性地为我提供一个词,一个球员。” game.the_word = ARGV.clear gets.chomp.split('')'code' –

+0

把它放在它自己的行上,在'game.the_word'赋值和'gets.chomp'调用之前。如果你的代码中没有使用“ARGV”(你似乎不是),那么你可以把它放在文件的顶部。 –

+0

明白了!真棒。非常感谢ARGV.clear; gets.chomp.split('') –