Синтаксис для размещения блока в одной строке - PullRequest
23 голосов
/ 01 ноября 2008

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

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

И я хочу назвать это так:

something 'hello' { do_it }

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

something 'hello' do
  do_it
end

За исключением того, что я как бы скучаю по хорошему виду того, что он в одной строке.

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

Ответы [ 3 ]

35 голосов
/ 01 ноября 2008

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

something('hello') { do_it }

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

1 голос
/ 01 ноября 2008

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

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

# => "HELLO WORLD"
something("hello world") { |i| puts i}
0 голосов
/ 02 ноября 2008

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

>> def something(arg1 , &block)
>>   yield block
>> end
=> nil
>> def do_it
>>   puts "Doing it!"
>> end
=> nil
>> something('hello') { do_it }
"Doing it!"
=> nil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...