1

Rubyで「コネクトフォー」アプリを作っています。

私は次のクラスを持っていますwin

class Win

  def up
    #
  end

  def down
    #
  end

  def diagonal_one
    #
  end

  def diagonal_two
    #
  end

end  

次のように定数を作成したいと思います。

  CONDITIONS = [up, down, diagonal_one, diagonal_two]

だから私は簡単にチェックすることができWin::CONDITIONSました - しかし、このアプローチはスローしundefined local variable or method 'up' for Win:Class (NameError)ます. メソッドを定数に入れる方法はありますか? そうでない場合、これを行うためのより良い方法は何ですか?

4

3 に答える 3

1

これは期待どおりに機能しますが、これらのメソッドをWinクラス メソッドとして使用します。

class Win
  class << self

    def up
      #
    end

    def down
      #
    end

    def diagonal_one
      #
    end

    def diagonal_two
      #
    end
  end
end

クラスWinのコンテキストでインスタンス メソッドを使用しようとしたため、エラーが発生しました。Win

于 2013-11-14T15:26:20.140 に答える
1

一般的な方法は、シンボルの配列を定義することです:

 CONDITIONS = %i[up down diagonal_one diagonal_two]

オブジェクトのメソッドを呼び出す必要があるときはいつでも、オブジェクトを呼び出しsend(...)ます。

于 2013-11-14T16:18:22.100 に答える
0

クラス/インスタンスコンテキストの違いに加えて、書き込みupはそのメソッドを呼び出しますが、これはあなたの意図ではないかもしれません.

メソッドの名前をシンボルで保存し、次の:upように呼び出すことができます

a_win_instance.send :up
于 2013-11-14T15:34:35.603 に答える