Ruby 有“method_missing”,Tcl 有“unknown”,大多数高度动态的语言都有一个等效的构造,当调用未定义的方法时会调用该构造。添加此类功能非常有意义;有些事情需要发生,并且没有理由不允许程序员重新定义该事情。添加起来相当简单,它可以制作一些简洁的“检查我的语言可以做什么”的演示。
这种行为在实际应用程序代码中真正有用的地方在哪里?
我能想到的只有:
- 也许对于在不展开堆栈的情况下启动调试器很有用(但我不确定这是否会算作“常规应用程序代码”,并且在大多数情况下异常也会起作用)。
- 对于“神奇的”代理对象.. 即在第一次使用时创建或加载而不更改接口的惰性对象(尽管这似乎很容易通过其他方式完成)。
还有其他合法用途吗?
澄清:我真的不认为“避免输入引号的语法糖”是合法的用途。别人可能会,我不会。