【发布时间】:2015-12-29 07:43:46
【问题描述】:
当我编写一个返回值的多行块时,我喜欢使用大括号而不是do-end,以表明该块的目的是返回东西,而不是做事物。
Rubocop 的标准配置不允许这样做,rubocop -a 转换 do-end 块中的任何多行块。
# I like but Rubocop hates.
expect {
delete :destroy, id: thing.to_param
}.to change(Thing, :count).by(-1)
# I don't like but Rubocop does.
expect do
delete :destroy, id: thing.to_param
end.to change(Thing, :count).by(-1)
# That, we both like.
before do
stub_api_calls
admin_sign_in create(:super_admin)
end
Rubocop 中是否有任何配置参数允许这种区分?
编辑:或者,至少,如果右括号后有一个点 (.),则可以避免更改括号块。
【问题讨论】:
-
显然,您不能让 Rubocop 区分该方法是打算返回某事还是做某事。那是务实的,而不是语义的。所以你所能做的就是,如果可能的话,关闭 Rubocop 对多行块的
do...end的偏好。 -
好吧,Rubocop 很容易意识到,如果在右括号后面有一个点 (
.)。 -
如果块是方法定义中最后一个表达式的一部分怎么办?
-
那么我不会太关心 do-end 块,因为我没有将返回值与下一个方法链接起来。