在任何其他编程语言中,我从未见过undef - 或任何其他允许你取消定义方法的东西.为什么Ruby需要它?
编辑:我不是在争论这个有什么问题.我只是不明白在运行时定义方法的目的?那是什么意思?怎么用?我从来没有用C或Java做过这个.
Ruby中还有一个需要该undef
功能的空白类模式.
我们的想法是从新课程中删除每个方法,以便您对其进行的每个通话结束#method_missing
.通过这种方式,您可以实现一个真正的代理,只需将所有内容随机播放.无论你的目标类有多大,用这个实现装饰器模式大约有十行代码.
如果你想看到这个习惯用法看看Ruby的一个模拟框架,他们会很多地使用它.像flexmock之类的东西.
另一个例子是基于某些条件动态地将函数添加到类中.在游戏中,您可以#attack
在玩家对象上添加一个方法,然后在他瘫痪时将其取走而不是使用布尔标志.这样,调用类可以检查方法的可用性而不是标志.我并不是说这是一个好主意,只是因为这是可能的,而且有更聪明的人,然后我想出了有用的东西来做这件事.