与this question部分相关但不同,因为这是关于构造函数调用...
我想创建一个固定数量的对象数组。
我可以这样做:
my @objects;
push( @objects, new MyPackage::MyObject() );
push( @objects, new MyPackage::MyObject() );
push( @objects, new MyPackage::MyObject() );
# ...
这有几种丑陋。使它成为一个循环只是略微好一点。
是不是有办法在Perl中创建一个(构造函数初始化的)对象数组?
事后问题:
我想创建的这些“对象”实际上是用于C结构的SWIG生成的包装器,即没有“行为”的数据结构(除了SWIG生成的get
和set
函数)。我只想将数组作为参数传递给C函数,这将为我填充结构;我是否需要来调用构造函数,或者是否有快捷方式使用get
函数来读取结构内容? (是的,我非常对OOPerl来说是新的......)
答案 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(),
# ...
);