这显然不起作用:
push( my(@arr), '') for 0..$somenum; # []
但是,如果我们使用包变量,它会给我们带来所需的效果:
push( our(@arr), '') for 0..$somenum; # ['','','', ...]
但它带来了不必要的副作用。
是否有合理,简洁的一体化解决方案?或者使用两个陈述最好的建议?
my @arr;
push( @arr, '' ) for 0..$somenum; # ['','','', ...]
我想避免多个陈述。当有许多阵列被填充时,它看起来很混乱,并且浪费了太多空间。
我意识到上面的内容可以在没有 push 的情况下完成(即my @arr = ('') x $somenum;
),但出于不同的原因,我想使用push。 @texasbruce提出了一个很好的观点,map
对于这样的事情会更好,即使有关于为此目的使用 map 的争论。不过,我认为这是一个有趣的练习。
答案 0 :(得分:2)
>>> df1.mul(df2.squeeze(), axis='index')
a b d
A 10 20 30
B 60 80 100
C 150 180 210
是官方未定义的行为。
注意:使用语句修饰符条件或循环结构(例如,
my ... for ...
)修改的my
,state
或our
的行为为未定义即可。my $x if ...
变量的值可以是my
,任何先前分配的值,或者可能是其他任何值。不要依赖它。 perl的未来版本可能会与您尝试使用的perl版本有所不同。这是龙。
(原文强调。)
要为新数组指定值,请使用作业。
undef
如果要分配的值有所不同,请使用my @arr = ('') x ($somenum+1);
。
map
答案 1 :(得分:2)
据我所知,你应该使用
my @arr = ('') x ($somenum+1);
表示所有元素相同的情况,
my @arr = map rand, 0 .. $somenum;
对于您引用的值不同的情况
答案 2 :(得分:-1)
除了使用push
作为赋值运算符之外,我认为这不会起作用。
push my @arr, ('') x ($somenum+1);
对于类似于使用后缀for循环尝试的内容,数组将在循环中以词法范围限定并立即超出范围。