30

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

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

我想这样称呼它:

something 'hello' { do_it }

除了这对我不起作用,我遇到了语法错误。如果我这样做,它会起作用:

something 'hello' do
  do_it
end

除了那里我有点想念它在一条线上的漂亮外观。

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

4

3 回答 3

46

你需要用括号括起来你的论点:

something('hello') { do_it }

那应该行得通。

于 2008-11-01T17:20:17.380 回答
2

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

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

# => "HELLO WORLD"
something("hello world") { |i| puts i}
于 2008-11-01T16:22:22.877 回答
0

呃,怎么样:

>> def something(arg1 , &block)
>>   yield block
>> end
=> nil
>> def do_it
>>   puts "Doing it!"
>> end
=> nil
>> something('hello') { do_it }
"Doing it!"
=> nil
于 2008-11-02T06:33:46.403 回答