Perl:构造对象数组
Posted
技术标签:
【中文标题】Perl:构造对象数组【英文标题】:Perl: Constructing an array of objects 【发布时间】:2011-09-26 15:21:12 【问题描述】:与this question 部分相关但不同,因为这是关于构造函数调用...
我想创建一个包含固定数量对象的数组。
我可以这样做:
my @objects;
push( @objects, new MyPackage::MyObject() );
push( @objects, new MyPackage::MyObject() );
push( @objects, new MyPackage::MyObject() );
# ...
那是几种丑陋的。让它成为一个循环只会稍微好一点。
难道没有办法在 Perl 中创建一个(构造函数初始化的)对象数组吗?
事后思考的问题:
我想要创建的这些“对象”实际上是 SWIG 生成的 C 结构包装器,即没有“行为”的数据结构(除了 SWIG 生成的 get
和 set
函数)。我只想将数组作为参数传递给 C 函数,它将为我填充结构;我是否需要 调用构造函数,或者是否有一个捷径可以让get
函数在之后读取结构内容? (是的,我非常是 OOPerl 的新手......)
【问题讨论】:
【参考方案1】:有不止一种简洁的方法:
my @objects = map new MyPackage::MyObject() 1..$N;
my @objects = ();
push @objects, new MyPackage::MyObject() for 1..$N;
【讨论】:
我只是喜欢第一个答案,永远不会想到这一点。 我投了赞成票,因为我也会使用map
,但是在间接对象语法MyPackage::MyObject0->new()
上的嘘声要好得多,另一种方式会带来很多歧义。
事实上,他们正在讨论在未来版本readwriteweb.com/hack/2011/09/…第271帧中删除间接对象语法。另见perldoc perlobj
第一个解决方案是纯粹的美,正是我希望找到的。 @Joel Berger:感谢您的提示,我从没想过看起来如此熟悉的 new ...
语法在 Perl 中有脚洞。【参考方案2】:
你可以说
@objects = (new MyPackage::MyObject(), new MyPackage::MyObject(), new MyPackage::MyObject());
【讨论】:
【参考方案3】:您可以通过向push
提供多个参数来避免循环并重复相同的语句:
push(@objects,
new MyPackage::MyObject(),
new MyPackage::MyObject(),
new MyPackage::MyObject());
这是可能的,因为push
的原型是push ARRAY,LIST
。
或者您可以使用数组作曲家以更直接的方式执行此操作(首选):
my @objects = (
new MyPackage::MyObject(),
new MyPackage::MyObject(),
new MyPackage::MyObject(),
);
【讨论】:
【参考方案4】:您可以构造一个对象列表并将其分配给您的数组:
my @objects= (
new MyPackage::MyObject(),
new MyPackage::MyObject(),
new MyPackage::MyObject(),
# ...
);
【讨论】:
以上是关于Perl:构造对象数组的主要内容,如果未能解决你的问题,请参考以下文章