我在练习一些面试问题时发现了这一点。我看了看,perldoc -f tie
但无法得到它。我知道bless
并正在我的程序中使用。
谁能告诉我它是什么tie
以及它是如何相关和不同的bless
,以及它的用法?我会欣赏任何简单的例子。
PS:我是一名 perl 开发人员,并在日常生活中使用它。我关心的不是面试,而是知道
2 回答
bless
用于构造对象。
tie
允许代码为接口提供一个变量。例如,看起来您正在分配一个变量,但您实际上是在调用一个子程序。tie
和其他形式的魔法主要用于提供“聪明”的接口(例如,改变%ENV
改变环境,改变%SIG
集合信号处理程序,$!
镜像两者errno
和perror
等等)。它还可以用于扩展现有代码的用途(例如,创建看起来像文件句柄的东西允许人们重用期望从文件句柄获取其输入的代码)。
我可能会这样回答你的面试问题:
Tie 和 bless 提供类似的功能,因为它们将自定义行为与变量相关联。不同之处在于焦点 -tie
是关于向“标准”数据结构添加新行为,其中bless
是关于完全创建“新”数据结构。
因此,您更受限制tie
于您正在使用的数据类型的基本操作,其中bless
ed 数据结构具有几乎无限的可能性范围。但权衡是tie
ed 变量可以作为替换的替代品——如果您通过将“散列”扩展tie
至文件或数据库,它仍然可以以相同的方式运行,而无需任何类型的代码修订。
这种优势在很多方面也是它的弱点——未来的程序员在面对一些代码中的对象和方法调用时,会知道他们需要查看类来了解正在发生的事情——他们可能没有意识到捆绑哈希(或标量)正在做“一些特别的事情”。
因此,我建议作为一种风格问题,tie
应该为诊断和测试角色保留 - 当哈希中的值发生变化时记录可能很方便,但不应该用于使事情以意想不到的方式表现。