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