Ruby 动态方法调用及相关特性详解
1. 动态方法调用
在编程中,动态调用方法是一项非常实用的技术。在 Ruby 里,有多种方式可以实现动态方法调用。
1.1 模块常量处理
Module.constants
会返回模块可用的所有常量,包括其超类的常量。若当前不需要超类的常量,可从列表中减去它们。在 Ruby 1.8 及以后版本,反射方法默认会递归到父类及其祖先类,传入 false
可阻止这种递归。
1.2 使用 send
方法
在 C 和 Java 中,程序员常需编写调度表来根据命令调用函数,例如下面的 C 代码:
typedef struct {
char *name;
void (*fptr)();
} Tuple;
Tuple list[] = {
{ "play", fptr_play },
{ "stop", fptr_stop },
{ "record", fptr_record },
{ 0, 0 },
};
void dispatch(char *cmd) {
int i = 0;
for (; list[i].name; i++) {
if (strncmp(list[i].name, cmd, strlen(cmd)) == 0) {
list[i].fptr();
return;
}
}