我知道这可能是Ruby的public_send方法有等价物吗?的重复。我想解释一下我正在做什么,也许有人可以提供建议。
最近几天,我一直在将一个Ruby应用程序移植到Crystal以进行学习。由于缺少
我有一个哈希表,其中包含按键作为键和方法作为值。根据按下的键,调用相应的方法。这显然使用
从链接的问题中,我了解到Crystal是编译的,因此不允许动态方法调用。但是,如果您查看Vim编辑器,用户也可以将键映射到方法。而vi(m)是用C写的。
我想知道我是否错过了什么。
我知道我可能可以硬编码一个switch语句,并调用适当的方法,但这仍然不允许用户将密钥分配给方法。是否有任何替代这个非常大的开关情况方法?
(我猜想,与其在
最初的回答
有更好的解决方案吗?
最近几天,我一直在将一个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
最初的回答
有更好的解决方案吗?