2

我在练习一些面试问题时发现了这一点。我看了看,perldoc -f tie但无法得到它。我知道bless并正在我的程序中使用。

谁能告诉我它是什么tie以及它是如何相关和不同的bless,以及它的用法?我会欣赏任何简单的例子。

PS:我是一名 perl 开发人员,并在日常生活中使用它。我关心的不是面试,而是知道

4

2 回答 2

4

bless用于构造对象。

tie允许代码为接口提供一个变量。例如,看起来您正在分配一个变量,但您实际上是在调用一个子程序。tie和其他形式的魔法主要用于提供“聪明”的接口(例如,改变%ENV改变环境,改变%SIG集合信号处理程序,$!镜像两者errnoperror等等)。它还可以用于扩展现有代码的用途(例如,创建看起来像文件句柄的东西允许人们重用期望从文件句柄获取其输入的代码)。

于 2016-12-21T15:31:11.600 回答
3

我可能会这样回答你的面试问题:

Tie 和 bless 提供类似的功能,因为它们将自定义行为与变量相关联。不同之处在于焦点 -tie是关于向“标准”数据结构添加新行为,其中bless是关于完全创建“新”数据结构。

因此,您更受限制tie于您正在使用的数据类型的基本操作,其中blessed 数据结构具有几乎无限的可能性范围。但权衡是tieed 变量可以作为替换的替代品——如果您通过将“散列”扩展tie至文件或数据库,它仍然可以以相同的方式运行,而无需任何类型的代码修订。

这种优势在很多方面也是它的弱点——未来的程序员在面对一些代码中的对象和方法调用时,会知道他们需要查看类来了解正在发生的事情——他们可能没有意识到捆绑哈希(或标量)正在做“一些特别的事情”。

因此,我建议作为一种风格问题,tie应该为诊断和测试角色保留 - 当哈希中的值发生变化时记录可能很方便,但不应该用于使事情以意想不到的方式表现。

于 2016-12-21T13:51:40.727 回答