Tie::Array - 绑定数组的基类
package Tie::NewArray;
use Tie::Array;
@ISA = ('Tie::Array');
# mandatory methods
sub TIEARRAY { ... }
sub FETCH { ... }
sub FETCHSIZE { ... }
sub STORE { ... } # mandatory if elements writeable
sub STORESIZE { ... } # mandatory if elements can be added/deleted
sub EXISTS { ... } # mandatory if exists() expected to work
sub DELETE { ... } # mandatory if delete() expected to work
# optional methods - for efficiency
sub CLEAR { ... }
sub PUSH { ... }
sub POP { ... }
sub SHIFT { ... }
sub UNSHIFT { ... }
sub SPLICE { ... }
sub EXTEND { ... }
sub DESTROY { ... }
package Tie::NewStdArray;
use Tie::Array;
@ISA = ('Tie::StdArray');
# all methods provided by default
package main;
$object = tie @somearray,'Tie::NewArray';
$object = tie @somearray,'Tie::StdArray';
$object = tie @somearray,'Tie::NewStdArray';
此模块为绑定数组类提供方法。有关绑定数组所需的函数列表,请参见 perltie。基本的 Tie::Array 包提供什么都不做的 DESTROY
和 EXTEND
方法,以及在对绑定数组调用 delete() 或 exists() 内置函数时会 croak() 的 DELETE
和 EXISTS
方法的存根,以及根据基本 FETCH
、STORE
、FETCHSIZE
、STORESIZE
实现的 PUSH
、POP
、SHIFT
、UNSHIFT
、SPLICE
和 CLEAR
方法。
Tie::StdArray 包提供绑定数组所需的高效方法,这些方法作为对“内部” Perl 数组的祝福引用来实现。它继承自 Tie::Array,并且应该使绑定数组的行为与标准数组完全相同,从而允许选择性地重载方法。
对于希望编写自己的绑定数组的开发人员,所需的方法将在下面简要定义。有关更详细的描述以及示例代码,请参见 perltie 部分。
类方法由命令 tie @array, classname
调用。将数组实例与指定的类关联。LIST
代表完成关联所需的附加参数(类似于 AnyDBM_File 及其同类)。该方法应返回一个提供以下方法的类的对象。
将数据 value 存储到与对象 this 关联的绑定数组的 index 中。如果这使得数组变大,则应为新位置返回类的 undef
映射。
检索与对象 this 关联的绑定数组的 index 中的数据。
返回与对象 this 关联的绑定数组中的项目总数。(等效于 scalar(@array)
)。
将与对象 this 关联的绑定数组中的项目总数设置为 count。如果这使得数组变大,则应为新位置返回类的 undef
映射。如果数组变小,则应删除超出 count 的条目。
通知调用数组可能增长到包含 count 个条目。可用于优化分配。此方法无需执行任何操作。
验证绑定数组 this 中是否存在索引 key 处的元素。
Tie::Array 实现是一个存根,它只是 croaks。
从绑定数组 this 中删除索引 key 处的元素。
Tie::Array 实现是一个存根,它只是 croaks。
清除(删除、删除、...)与对象 this 关联的绑定数组中的所有值。
普通对象析构方法。
将 LIST 中的元素追加到数组中。
移除数组的最后一个元素并返回它。
移除数组的第一个元素(将其他元素向下移动)并返回它。
将 LIST 元素插入数组的开头,将现有元素向上移动以腾出空间。
对数组执行等效于 splice
的操作。
offset 是可选的,默认值为零,负值从数组末尾开始计数。
length 是可选的,默认值为数组的剩余部分。
LIST 可以为空。
返回 offset 处原始 length 个元素的列表。
目前不支持绑定 @ISA。在用于检测 @ISA 设置的魔术条目和用于实现 'tie' 的魔术条目之间存在潜在的冲突。
Nick Ing-Simmons <[email protected]>