/ / Rubyブロック内のメソッドへのアクセス - ruby

Rubyブロック内のメソッドへのアクセス - ルビ

私は関数に引数として渡されるブロックを持っています。このブロックにはいくつかの方法があります。こんな感じです:

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)
)