在许多使用RSpec的Ruby或Ruby on Rails项目中,eql
在spec文件中经常使用,但eql?
很少在spec文件之外使用,而==
很少使用在spec文件中,但经常在spec文件之外。
例如,查看狂欢项目:
spree agrimm$ git grep eql **/spec/**/* | wc
135 589 14976
spree agrimm$ git grep eql | wc
138 600 15274
spree agrimm$ git grep '==' **/spec/**/* | wc
56 413 5764
spree agrimm$ git grep '==' | wc
1165 11857 297297
我理解==
和eql?
之间的difference in functionality。但是为什么人们经常选择在RSpec中使用eql
(对应于eql?
的匹配器)(例如expect(a).to eql(b)
)而不是==
(例如{{} 1}})?
答案 0 :(得分:0)
这只是猜测,而不是明确的知识。其他人可能肯定知道。
# Tests whether a == b
expect(a).to be == b
看起来不如
# Tests whether a.eql?(b)
expect(a).to eql(b)
但有些用户并不知道您可以使用eq
来提供
# Tests whether a == b
expect(a).to eq(b)
Spree项目经常使用eq
:
spree agrimm$ git grep eq **/spec/**/* | wc
2930 11694 320369
答案 1 :(得分:0)
==
在当前RSpec文件中很少发生,因为首选==
语法不支持expect
匹配器。它经常出现在实现文件中,因为它是更自然的语法。
同样,eql
(和eq
)经常出现在RSpec中,因为它们分别是eql?
和==
的匹配器。生产中几乎没有必要,因为==
占主导地位。