使用方法填充常量

时间:2013-11-14 15:23:09

标签: ruby

我正在使用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)。有没有办法将方法放在常量中?如果没有,有什么更好的方法呢?

3 个答案:

答案 0 :(得分:1)

这将按预期工作,但您将这些方法作为Win类方法:

class Win
  class << self

    def up
      #
    end

    def down
      #
    end

    def diagonal_one
      #
    end

    def diagonal_two
      #
    end
  end
end

您遇到错误,因为您尝试在Win类的上下文中使用Win实例方法。

答案 1 :(得分:1)

常见的方法是定义一个符号数组:

 CONDITIONS = %i[up down diagonal_one diagonal_two]

并且每当您需要在对象上调用方法时,请在对象上调用send(...)

答案 2 :(得分:0)

除了类/实例上下文的不同之外,编写up会调用该方法,这可能不是您的意图。

您可以使用符号:up存储方法的名称,并像

一样调用它
a_win_instance.send :up