【发布时间】:2015-11-08 19:43:08
【问题描述】:
正如许多 Perl 开发人员所知,unbless 用于从对象中删除 blessing。
我试图通过调查其实施来了解它在内部是如何工作的。
我尝试在其包Data::Structure::Util 中检查its implementation。这是Source:
sub unbless {
unbless_xs( $_[0] );
}
我在哪里可以找到unbless_xs 子实现/源代码?
【问题讨论】:
-
我从事 Perl 开发已有 20 年了,从未听说过
unbless... -
将 'any' 更改为 'many' :) ... 那么你如何取消对象呢?
-
“任何 Perl 开发者都知道,unbless 用于从对象中移除祝福” 不是。
unbless是由 @ 导出的函数987654330@。它不是核心模块,我从未见过它使用过。如果您需要unbless一个对象,那么您的设计是可怕的。你想做什么? -
为这些具有
TO_JSON方法的对象编写一个角色。即使您无法控制对象最初是如何创建的,也最好将它们重新分配到提供附加功能的子类中,而不是取消它们并开始到处泄漏。 -
unblessing 对象是糟糕设计的一个原因是,它故意破坏了对象提供的封装,并暴露了依赖于对象实现细节的代码。相反,通过对对象进行子类化并提供 TO_JSON 方法,您可以保持封装到位,并简单地添加外部代码所需的行为。它将内部保持在应有的位置,并使外部代码不依赖于特定对象的内部特征。如果您不能将对象作为子类新建,请编写具有 rebless 能力的子类。