Ruby rspec before:each-如何在一行上执行而不是执行..结束块?

Ruby rspec before:each-如何在一行上执行而不是执行..结束块?,ruby,rspec,Ruby,Rspec,我的代码在:每个块之前使用一个: before :each do @unsorted=[1,5,6,7,4,5,8,4,2,5,2] end it "contains an unsorted an array" do test_array = BubbleSort.new(@unsorted) expect(test_array.contents).to eq [1,5,6,7,4,5,8,4,2,5,2] end 我希望前面的:每个代码都是内联的,但使用 before :ea

我的代码在:每个块之前使用一个

before :each do
  @unsorted=[1,5,6,7,4,5,8,4,2,5,2]
end 
it "contains an unsorted an array" do
  test_array = BubbleSort.new(@unsorted)
  expect(test_array.contents).to eq [1,5,6,7,4,5,8,4,2,5,2]
end 
我希望前面的
:每个
代码都是内联的,但使用

before :each {@unsorted=[1,5,6,7,4,5,8,4,2,5,2]}
给出:

syntax error, unexpected '{', expecting keyword_
end (SyntaxError)

如何解决这个问题?

一个答案是在
之前使用
,而不是在
之前使用:每个

before {@unsorted=[1,5,6,7,4,5,8,4,2,5,2]}

当有一个写为
{}
的块时,Ruby的语法不允许省略参数周围的括号。您需要执行以下操作:

before(:each){@unsorted=[1,5,6,7,4,5,8,4,2,5,2]}

这不是Ruby的惯用用法,但它是允许的

before :each do puts "something here" end
我认为
之前的
的默认参数是
:每个
,因此您可以省略它

do..end
块相比,
{}
块的优先级更高,这要求我们使用括号,这样块就不会与参数而不是方法相关联。如果参数是一个使用块执行某些操作的方法,那么它将被允许,并且可能会令人困惑


当然,您的错误是因为解析器看到您试图将块(意外的
{
)应用于符号。

您的意思是,当有一个块被指定为
{}
而不是
do..end
时,需要括号?原因是
{}的优先级较高
block与
do..end
block相比?@vgoff是的。我不够准确。感谢您指出。添加了一个答案,说明了为什么我们在本例中使用括号,以及在何处以及为什么允许使用括号。您的答案仍然为+1。如果您有一个方法/局部变量,但带有符号文字,则可能是这种情况在这种情况下,我认为没有空间将其作为一种方法。