gpt4 book ai didi

ruby - 使用大括号的单行 shoulda 语法

转载 作者:行者123 更新时间:2023-11-28 21:01:13 28 4
gpt4 key购买 nike

在 Rails Test Prescriptions 一书中(b10.0,第 176 页),有如下所示的单行断言示例:

应该“成功”{ assert_response :success }

这对我来说似乎不是有效的 ruby​​ 语法,并且 ruby​​ 报告左大括号是意外的。为了让它被解析,我必须把它改成

应该“成功”;做 assert_response :success end

第一个例子的语法有什么问题?

最佳答案

这是有效的 Ruby 语法。好吧,有点。这根本没有意义!

由于使用花括号的文字 block 的优先级高于传递不带括号的参数,因此该 block 被绑定(bind)到参数而不是方法调用。如果参数本身是一个方法调用,那么您甚至不会收到语法错误。您会挠头想知道为什么您的 block 没有被调用。

要解决此问题,您可以在参数周围加上括号,因为括号的优先级高于花括号,或者使用 do/end 形式,这是较低的优先级而不是没有括号的参数列表。

def foo; yield if block_given?; 'foo' end

puts foo { puts 'block' }
# block
# foo

puts(foo) { puts 'block' }
# foo

puts foo do puts 'block' end
# foo

puts foo { puts 'block' }, foo { puts 'block' }
# block
# block
# foo
# foo

puts 'foo' { puts 'block' }
# SyntaxError: (irb):19: syntax error, unexpected '{', expecting $end

关于ruby - 使用大括号的单行 shoulda 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534436/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com