Я делаю тесты rspec. Эти тесты:Блок работает только в том случае, если это второй параметр
describe "adder" do
it "adds one to the value returned by the default block" do
adder do
5
end.should == 6
end
it "adds 3 to the value returned by the default block" do
adder(3) do
5
end.should == 8
end
end
Это проходит испытания:
def adder(n=1,&block)
yield + n
end
в то время как это не делает:
def adder(&block,n=1)
yield + n
end
Он работает только тогда, когда я прохожу блок в качестве второго аргумента. Почему это? Всегда ли это происходит с блоками, или это только для этого конкретного случая?
потому что его способ рубинов работает. Вы можете пропускать лямбды в качестве аргументов везде, где хотите, но – apneadiving
Отлично! так что это правило. Хорошо, поэтому блоки могут проходить только в качестве последних аргументов, или то, что является точным формальным правилом, которого я не смог найти нигде. – vike272727
Вторая версия - синтаксическая ошибка для меня (ruby 2.2) –