Подтвердить что ты не робот

Синтаксис для размещения блока на одной строке

Итак, у меня есть метод Ruby:

def something(variable, &block)
  ....
end

И я хочу называть его вот так:

something 'hello' { do_it }

За исключением того, что не работает для меня, я получаю синтаксическую ошибку. Если я это сделаю, он работает:

something 'hello' do
  do_it
end

За исключением того, что я не замечаю, что он выглядит на одной линии.

Я могу понять, почему это происходит, так как может показаться, что хеш передается как вторая переменная, но без запятой между переменными... но я предполагаю, что должен быть способ справиться с этим что мне не хватает. Есть?

4b9b3361

Ответ 1

Вам нужно заключить в скобки аргумент:

something('hello') { do_it }

Это должно работать.

Ответ 2

Если вы хотите "def something" принять блок, вам нужно предоставить данные этому блоку. Например:

#to uppercase string
def something(my_input)
 yield my_input.upcase
end

# => "HELLO WORLD"
something("hello world") { |i| puts i}

Ответ 3

Э-э, как насчет:

>> def something(arg1 , &block)
>>   yield block
>> end
=> nil
>> def do_it
>>   puts "Doing it!"
>> end
=> nil
>> something('hello') { do_it }
"Doing it!"
=> nil