Ответ 1
Вам нужно заключить в скобки аргумент:
something('hello') { do_it }
Это должно работать.
Итак, у меня есть метод Ruby:
def something(variable, &block)
....
end
И я хочу называть его вот так:
something 'hello' { do_it }
За исключением того, что не работает для меня, я получаю синтаксическую ошибку. Если я это сделаю, он работает:
something 'hello' do
do_it
end
За исключением того, что я не замечаю, что он выглядит на одной линии.
Я могу понять, почему это происходит, так как может показаться, что хеш передается как вторая переменная, но без запятой между переменными... но я предполагаю, что должен быть способ справиться с этим что мне не хватает. Есть?
Вам нужно заключить в скобки аргумент:
something('hello') { do_it }
Это должно работать.
Если вы хотите "def something" принять блок, вам нужно предоставить данные этому блоку. Например:
#to uppercase string
def something(my_input)
yield my_input.upcase
end
# => "HELLO WORLD"
something("hello world") { |i| puts i}
Э-э, как насчет:
>> def something(arg1 , &block)
>> yield block
>> end
=> nil
>> def do_it
>> puts "Doing it!"
>> end
=> nil
>> something('hello') { do_it }
"Doing it!"
=> nil