1

ブロックとmethod_missingRubyクラスでの使用について学び始めたばかりで、一般的な式が

def method_missing(sym, *args, &block)

私の質問は&block、出力で実行できるかどうかです。例えば:

class Foo
  def method_missing(sym, *args, &block)
     puts "#{sym} was called with #{args} and returned #{block.call(args)}"
  end
end

bar = Foo.new
bar.test(1,2,3, lambda {|n| n + 2} )

ブロックが新しい配列を返すようにこれを機能させる方法はありますか?

4

2 に答える 2

1

多分あなたはこれが欲しいと思います:

class Foo
  def method_missing(sym, *args, &block)
     puts "#{sym} was called with #{args} and returned #{block.call(args)}"
  end
end

bar = Foo.new
bar.test(1,2,3) do |a| 
  a.map{|e| e + 2}
end

実行結果:

test was called with [1, 2, 3] and returned [3, 4, 5]

更新: yield は以下のように使用できます。

 puts "#{sym} was called with #{args} and returned #{yield(args) if block_given?}"
于 2013-12-11T03:09:13.867 に答える
0

このようなことをしようとしていると思いますか?

def foo(*args, &block)
  args.map(&block)
end

foo(1, 2, 3) { |n| n + 2 } #=> [3, 4, 5]
于 2013-12-11T02:34:58.270 に答える