7

这在 perl 中不起作用:for(10...0)它基本上不会循环一次,因为它10>0最初会检查它。

创建递减迭代for循环的任何替代简写?

4

3 回答 3

12
for (reverse 0 .. 10) {
  say $_;
}

使用reverse功能

不幸的是,这会强制将范围评估为一个列表,因此这比没有reverse.

于 2013-08-30T18:23:52.673 回答
1
for (map -$_,-10..0) { ... }
for (map 10-$_,0..10) { ... }

如果范围的任何部分为负数,则第一个比 using 短reverse

于 2013-08-30T18:40:29.033 回答
1

我不确定简洁是否是这样做的一个很好的标准,但你不需要map在反相解决方案中,也不需要在反转解决方案reverse中:

# By Inverting without map, one of:
for(-10..0){$_=-$_;say}
for(-10..0){$_*=-1;say}
# Compare to similar length with map:
for(map-$_,-10..0){say}

# Can just use -$_ where $_ is used, if $_ is used < 6 times; that's shorter.
for(-10..0){say-$_}

# By Reversing without reverse (in a sub; in main use @ARGV or @l=...=pop@l)
@_=0..10;while($_=pop){say}

# More Pop Alternatives
for(@_=0..10;$_=pop;say){}
@_=0..10;for(;$_=pop;){say}
@_=0..10;do{say$_=pop}while$_
($_,@_)=(10,0..9);do{say}while($_=pop)
# Though, yeah, it's shorter with reverse
for(reverse 0..10){say}
于 2018-12-11T09:55:01.427 回答