我知道这可能与Any equivalent of Ruby's public_send method?相同。我想解释一下我在做什么,也许有人可以提供建议。
最近几天,我一直在移植一个ruby应用程序以学习Crystal。由于缺少send
,我不得不削减很多功能,但是今天我在程序中遇到了主要障碍。
我有一个哈希,其中包含击键作为键,并包含方法作为值。根据敲击的键,调用适当的方法。显然,这使用send
来实现。
根据链接的问题,我知道Crystal是编译的,因此不允许动态方法调用。但是,如果您查看Vim编辑器,则用户也可以将键映射到方法。 vi(m)用C编写。
我想知道我是否错过了什么。
我知道我可能可以用每个键对switch语句进行硬编码并调用适当的方法,但这仍然不允许用户将键分配给方法。除了这种非常大的开关案例方法,还有其他选择吗?
(我想不是检查when
部分中的键,而是检查绑定并调用方法。
binding = @bindings[key]
case binding
when :up
up
when :down
down
when .....
else
end
有更好的解决方案吗?
答案 0 :(得分:2)
我不确定这种方式是否最简单,最方便(也许更有经验的开发人员会在下面纠正我),但我会使用Proc:
def method1
puts "i'm method1"
end
def method2
puts "i'm method2"
end
def method3
puts "i'm method3"
end
hash = {
"ctrl": -> { method1 },
"shift": -> { method2 },
"alt": -> { method3 }
}
binding = ["ctrl", "shift", "alt"].sample
hash[binding].call #=> i'm method2