30

だから私はこのようなRubyメソッドを持っています:

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

そして、私はそれをこのように呼びたいです:

something 'hello' { do_it }

それがうまくいかないことを除いて、構文エラーが発生します。代わりにこれを行うと、機能します。

something 'hello' do
  do_it
end

そこを除いて、私はそれが一列に並んでいるという見栄えが少し欠けています。

ハッシュが2番目の変数として渡されているように見えるが、変数の間にコンマがないため、これが発生している理由がわかります...しかし、これに対処する方法が必要だと思います。 mがありません。ある?

4

3 に答える 3

46

引数を括弧で囲む必要があります。

something('hello') { do_it }

それはうまくいくはずです。

于 2008-11-01T17:20:17.380 に答える
2

「defsomething」でブロックを受け入れる場合は、そのブロックにデータを渡す必要があります。例えば:

#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 に答える