将块放在一行上的语法

时间:2008-11-01 16:04:21

标签: ruby syntax

所以我有一个像这样的Ruby方法:

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

我想这样称呼它:

something 'hello' { do_it }

除非对我不起作用,否则我会收到语法错误。如果我这样做,它可以工作:

something 'hello' do
  do_it
end

除此之外,我有点想念它在一条线上的漂亮外观。

我可以看到为什么会发生这种情况,因为它看起来像是作为第二个变量传递的哈希,但变量之间没有逗号......但我认为必须有办法处理这个问题我失踪了。有吗?

3 个答案:

答案 0 :(得分:34)

你需要为你的论点加上括号:

something('hello') { do_it }

这应该有效。

答案 1 :(得分:1)

如果你想要“def something”接受一个块,你需要向该块产生数据。例如:

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

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

答案 2 :(得分:0)

呃,怎么样:

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