Perl:构造一个对象数组

时间:2011-09-26 15:21:13

标签: perl oop swig

this question部分相关但不同,因为这是关于构造函数调用...

我想创建一个固定数量的对象数组。

我可以这样做:

my @objects;
push( @objects, new MyPackage::MyObject() );
push( @objects, new MyPackage::MyObject() );
push( @objects, new MyPackage::MyObject() );
# ...

这有几种丑陋。使它成为一个循环只是略微好一点。

是不是有办法在Perl中创建一个(构造函数初始化的)对象数组?

事后问题:

我想创建的这些“对象”实际上是用于C结构的SWIG生成的包装器,即没有“行为”的数据结构(除了SWIG生成的getset函数)。我只想将数组作为参数传递给C函数,这将为我填充结构;我是否需要来调用构造函数,或者是否有快捷方式使用get函数来读取结构内容? (是的,我非常对OOPerl来说是新的......)

4 个答案:

答案 0 :(得分:8)

有多种简明的方法可以做到:

my @objects = map { new MyPackage::MyObject() } 1..$N;

my @objects = ();
push @objects, new MyPackage::MyObject() for 1..$N;

答案 1 :(得分:1)

您可以通过向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(),
);

答案 2 :(得分:1)

你可以说

@objects = (new MyPackage::MyObject(), new MyPackage::MyObject(), new MyPackage::MyObject());   

答案 3 :(得分:0)

您可以构建一个对象列表并将其分配给您的数组:

my @objects= (
  new MyPackage::MyObject(),
  new MyPackage::MyObject(),
  new MyPackage::MyObject(), 
  # ...
);