我写了以下代码:
这段代码有效,但当
我该如何使
class Actions
def initialize
@people = []
@commands = {
"ADD" => ->(name){@people << name },
"REMOVE" => ->(n=0){ puts "Goodbye" },
"OTHER" => ->(n=0){puts "Do Nothing" }
}
end
def run_command(cmd,*param)
@commands[cmd].call param if @commands.key?(cmd)
end
def people
@people
end
end
act = Actions.new
act.run_command('ADD','joe')
act.run_command('ADD','jack')
puts act.people
这段代码有效,但当
@commands
散列成为类变量时,散列内部的代码无法访问@people
数组。我该如何使
@commands
散列成为类变量,同时仍能够访问特定对象实例变量?
add
、remove
和other
方法定义为实例方法,然后使用respond_to?
和send
来调用它们呢? - Victor Moroz@commands
成为一个类变量? - Andrew Grimmsend
和方法,您需要一个单独的列表,其中包含允许run_command
使用哪些方法,使用哈希将可用命令及其实现收集到一个漂亮整洁的包中。 - mu is too shortrespond_to?(cmd)
吗?为什么需要一个单独的允许命令列表? - Marek Příhodarun_command('people')
怎么办?你可以在所有可运行 run_command 的东西前面加上,比如说cmd_
,然后在检查respond_to?
之前添加这个前缀,从而获得类似的效果。 - mu is too short