0

この質問を更新して、把握するのに問題があることをよりよく反映します。以下の例は一種の作業ですが、どうすれば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!
4

1 に答える 1

0

このようなことができます。

class Test
  # reserved method to instantiate object
  def initialize(a,b,c)
    @a = a
    @b = b
    @c = c
  end

  # getters
  def a
    @a
  end

  def b
    @b
  end

  def c
    @c
  end

  def abc
    [@a, @b, @c] # returns an array
  end

  # setters
  def a=(var)
    @a = var
  end

  def b=(var)
    @b = var
  end

  def c=(var)
    @c = var
  end

  # set values all at once
  def update(a, b, c)
    @a = a
    @b = b
    @c = c
  end
end

z = Test.new('something','something','something')
z.update('something!','nothing!',"a thing!")
z.a
z.b
z.c
z.a = 'wow, new value!'
于 2012-06-14T03:28:18.377 に答える