1

、、、などのFooいくつかのメソッドを持つクラスがあります。button_0_0button_0_1button_0_2button_1_0

次の構文を使用して、これらに代わりにアクセスできるようにしたいと思います。

foo.button[0][1]
foo.button[1][2]
# etc.

@buttonインスタンス変数を作成し、すべてのbutton_*アクセサーを反復処理してそのように追加できることはわかっていますが、それは少し厄介なようで、実際には「ルビーな方法」ではありません。

この問題に対してもっと簡潔でRubyのような解決策があるかどうか疑問に思いました(多分method_missing?を使用することによって)—これを行うためのより良い方法を誰かが知っていますか?

[](これは途中でわかりましたが、欠落しているメソッドで新しいメソッドを呼び出すため、角かっこで動かなくなります...)

4

1 に答える 1

3
class Foo
  def button
    Button.new(self)
  end
  def button_0_1
    "zero-one"
  end
  def button_0_2
    "zero-two"
  end

  private
  class Button
    def initialize(parent)
      @parent           = parent
      @first_dimension  = nil
    end
    def [](index)
      if @first_dimension.nil?
        @first_dimension = index
        self
      else
        @parent.send("button_#{@first_dimension}_#{index}")
      end
    end
  end
end
puts Foo.new.button[0][1]
puts Foo.new.button[0][2]
于 2009-06-15T16:48:03.157 に答える