この質問を更新して、把握するのに問題があることをよりよく反映します。以下の例は一種の作業ですが、どうすればSubクラスにアクセスでき、Baseクラス内で定義できますか?クラスの外で電話をかける方が良いのではないでしょうか。もしそうなら、どうすればいいですか?この例で私が持っている2番目の質問は、別のクラスでそれらを使用できるように値を取得する方法です。ここでは、後で別のクラスで解凍する必要がある配列に値を格納します。これにprocを使用できないようにする必要がありますか?
基本的に私がやりたいのは、メソッドがネストされているかどうかに応じて、メソッドを2つの異なるクラスに分類することです。
class Sub
def initialize(base_class_method)
@base_class_method = base_class_method
@sub_methods = []
end
# omitted code here
def base_class_method
@base_class_method
end
def sub_actions(method)
@sub_methods << method
end
def return_sub_methods
@sub_methods
end
def method_missing(sub_method, &block)
if sub_method
sub_method
else
super
end
end
end
class Base
def initialize
@base_methods = []
end
# omitted code here
def base_actions(method)
@base_methods << method
end
def return_base_methods
@base_methods
end
def method_missing(method, &block)
if block_given?
Sub.new(method).instance_eval(&block)
elsif method
base_actions(method)
else
super
end
end
end
base = Base.new
base.instance_eval do
something1
something_with_a_block do
something_inside_block1_1
something_inside_block1_2
end
something2
something_with_a_block2_2 do
something_inside_block2_1
end
end
p base.return_base_methods #=> [:something1, :something2] works!