首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么assert_equal散列的格式/语法与其他assert_equals不同?

为什么assert_equal散列的格式/语法与其他assert_equals不同?
EN

Stack Overflow用户
提问于 2011-04-14 09:53:07
回答 1查看 6.1K关注 0票数 16

我正在学习Ruby Koans,目前使用的是AboutHashes。到目前为止,assert_equals遵循了一种特定的格式样式:assert_equal space expected_value comma actual value (例如,assert_equal 2, 1 + 1)。但是About散列中的test_creating_hashes定义有一个不遵循此模式的assert_equal,如果我更改它以匹配该模式,它将失败。具体地说:

代码语言:javascript
复制
def test_creating_hashes
  empty_hash = Hash.new
  assert_equal {}, empty_hash  # --> fails 
  assert_equal({}, empty_hash) # --> passes  
end

那么在这种情况下,assert_equal有什么特别之处呢?

测试失败消息的要点是:

代码语言:javascript
复制
<internal:lib/rubygems/custom_require>:29:in `require':    /Ruby_on_Rails/koans/about_hashes.rb:7: syntax error, unexpected ',', expecting keyword_end (SyntaxError)
assert_equal {}, empty_hash #{} are also used for blocks
                ^
from <internal:lib/rubygems/custom_require>:29:in `require'
from path_to_enlightenment.rb:10:in `<main>'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 10:12:30

它之所以失败,是因为Ruby将第一个示例解析为传入了一个空块{},而不是一个空散列。如果它给出了一个SyntaxError (见下文),我也不会感到惊讶。

然而,通过显式地放入括号,您就是在告诉ruby“这些是我想要传递到这个方法中的参数”。

代码语言:javascript
复制
def t(arg1, arg2)
  p arg1
end


ruby-1.9.2-p136 :057 > t {}
ArgumentError: wrong number of arguments (0 for 2)
ruby-1.9.2-p136 :056 > t {}, arg2
SyntaxError: (irb):56: syntax error, unexpected ',', expecting $end
t {}, arg2
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5657733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档