私は関数に引数として渡されるブロックを持っています。このブロックにはいくつかの方法があります。こんな感じです:
def func(&block)
end
func do
method1
method2(arg)
method3(arg)
end
私はfuncがブロック内の関数の構成を返すようにしたい:
method3 ( method2 ( method1 ) )
ブロック内の各メソッドにアクセスできる方法はありますか? methods.reduce(method1) { |method| method.call arg }
またはこれのような何か?
私にいくつかのアイデアを教えていただけますか?
回答:
回答№1の場合は3いいえ、これは不可能です。ブロック定義に関連付けられたRubyコードを解析することは(理論的には)可能ですが、意味が分かりません。
あなたの質問は非常に一般的です。あなたがそのブロックをコントロールしているかどうかにかかわらず、詳細を提示する必要はありません。実際の例がおそらくもっと役に立つでしょう。
私が持っている詳細から、私の提案はブロックを原点で分割する必要があります。それらすべてのメソッドを含むブロック全体を渡す代わりに、それらを必要に応じて再利用できるように、メソッドの配列を引数として渡します。
ラムダでラップして実行を遅らせることができます。
def func(*chain)
end
func(
->(arg) { method1 },
->(arg) { method2(arg) },
->(arg) { method3(arg) }
)
あなたも使用することができます Object.method
メソッドをフェッチしてパラメータとして渡します。
def func(*chain)
end
func(
method(:method1),
method(:method2),
method(:method3)
)