我有以下功能可行。但我不确定提取@_
子集的最佳方法是什么。如何以最佳方式从@_
中提取子集?
sub parseheader {
my $grps_len = shift;
my @grps;
for ( my $i = 0; $i < $grps_len; ++$in) {
my $x = shift;
print "$x\n";
push(@grps, $x);
}
return join(",", @grps), "\n";
}
print parseheader(3, "a", "b", "c");
答案 0 :(得分:3)
使用数组切片:
public <C, D> Either<C, D> flatMap(Function<B, Either<C, D>> f) {
if (this.isRight()) {
return f.apply(this.right);
} else {
// Error: can't convert A to C
return Either.left(this.left);
}
}
答案 1 :(得分:3)
使用列表或数组切片。
sub parseheader { join(",", @_[ 1 .. $_[0] ]) . "\n" }
print parseheader(3, @things);
但我会用
sub take_first { @_[ 1 .. $_[0] ] }
say join ",", take_first(3, @things);
如果要删除返回的元素,可以使用splice
。
say join ",", splice(@things, 0, 3);
顺便说一下,
for (my $i=0; $i < $grps_len; ++$i)
是一种缓慢而复杂的写作方式
for my $i (0..$grps_len-1)