【发布时间】:2019-04-30 11:11:57
【问题描述】:
我知道这可能与Any equivalent of Ruby's public_send method? 重复。我想解释一下我在做什么,也许有人可以提供建议。
过去几天我一直在移植一个 ruby 应用程序来学习 Crystal。由于缺少send,我不得不删减很多功能,但今天我的程序遇到了主要问题。
我有一个哈希,其中包含作为键的击键和作为值的方法。根据敲击的键,调用适当的方法。这显然使用send 来实现相同的功能。
从链接的问题中,我了解到 Crystal 已编译,因此不允许动态方法调用。但是,如果您查看 Vim 编辑器,用户也可以将键映射到方法。 vi(m) 是用 C 语言编写的。
我想知道我是否错过了什么。
我知道我可以用每个键对 switch 语句进行硬编码并调用适当的方法,但这仍然不允许用户将键分配给方法。这种非常大的 switch-case 方法有什么替代方法吗?
(我猜我不是检查when 部分中的密钥,而是检查绑定并调用该方法。
binding = @bindings[key]
case binding
when :up
up
when :down
down
when .....
else
end
有更好的解决方案吗?
【问题讨论】:
-
澄清您的 Vim 示例 - 我猜 Vimscript 是处理键绑定的东西,它是一种动态语言。如果它通过 C 语言,他们可以将键映射到函数并从中查找方法。
-
在 C 中,这很容易映射到函数指针。函数都编译好了,调用代码也编译好了,变化的输入值只是根据它在内存中的位置来选择使用哪个函数
标签: crystal-lang