2012-07-23 65 views
0

我试图使用rspec评估下面的代码。Ruby/Rails:eval似乎不工作

考虑:

# book = ... 
    Rails.logger.info book.inspect 

上面的代码打印返回类型的值是boolean{:foo=>false}

eval(book[:foo]).should be_false 

,但似乎并没有工作。虽然试图运行rspec的,它抛出以下异常:

Failure/Error: eval(book[:foo]).should be_false 
TypeError: 
    can't convert false into String 

那么,如何评估一个布尔值的方法,比如我的最终结果将是等效的?

+2

嗯,你为什么需要'这里eval'?你想达到什么目的?我想简单的'book [:foo]。should be_false'应该就够了。你得到一个错误的原因是'eval'接受一个字符串作为参数,并将该字符串评估为Ruby代码。 – 2012-07-23 10:25:45

回答

2

eval执行传递参数将其解释为Ruby代码。你认为哪些Ruby代码包含在false对象中?

eval(false) # cannot execute false object 
eval("false") # executes a string and returns false object 

看到区别?

我不知道你到底是什么样的测试,但你可以简单地尝试

book[:foo].should be_false 
+0

感谢您的快速响应!有效 ! – diya 2012-07-23 10:35:47