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 回答