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。如果您有一个方法/局部变量,但带有符号文字,则可能是这种情况在这种情况下,我认为没有空间将其作为一种方法。