我可以在其中创建一个带有"空插槽"的数组:
$ perl -wde 1
...
DB<1> $x[2] = 0
DB<2> x \@x
0 ARRAY(0x103d5768)
0 empty slot
1 empty slot
2 0
Run Code Online (Sandbox Code Playgroud)
要么
DB<3> $#y = 4
DB<4> x \@y
0 ARRAY(0x103d5718)
0 empty slot
1 empty slot
2 empty slot
3 empty slot
4 empty slot
Run Code Online (Sandbox Code Playgroud)
请注意:这与分配不同undef.
但是如何使用[和指定匿名数组]呢?
这不起作用:
DB<5> x [,,0]
syntax error at (eval 27)[/usr/local/lib/perl5/5.10.0/perl5db.pl:638] line 2, near "[,"
Run Code Online (Sandbox Code Playgroud)
这也失败了,因为我只得到指定的值:
DB<6> x []->[2] = 0
0 0
Run Code Online (Sandbox Code Playgroud)
额外问题:如何在Perl脚本中检查"空数组槽"?
背景:在我的测试脚本中,我希望能够精确地比较数组内容.例如,我想区分"未分配"和"分配了undef值".
感谢您的任何见解.
是否可以创建这样的匿名数组?
char **values = (*char[]){"aaa", "bbb", "ccc"};
Run Code Online (Sandbox Code Playgroud)
此方法有效:
char **values
char *tmp[] = {"aaa", "bbb", "ccc"};
values = tmp;
Run Code Online (Sandbox Code Playgroud) 在Java中,我发现以下代码比相应的庞大switch语句更清晰,更易于维护:
try {
selectedObj = new Object[] {
objA,
objB,
objC,
objD,
}[unvalidatedIndex];
} catch (ArrayIndexOutOfBoundsException e) {
selectedObj = objA;
}
Run Code Online (Sandbox Code Playgroud)
反对
switch (unvalidatedIndex) {
case 0:
selectedObj = objA;
break;
case 1:
selectedObj = objB;
break;
case 2:
selectedObj = objC;
break;
case 3:
selectedObj = objD;
break;
default:
selectedObj = objA;
}
Run Code Online (Sandbox Code Playgroud)
前者被认为是可接受的做法吗?我知道它不是最有效的,因为它涉及分配数组和捕获异常.当unvalidatedIndex超出范围时会不会引起不必要的事情(虽然处理了异常)?
如果可能的话,你会建议更清洁吗?
java switch-statement indexoutofboundsexception anonymous-arrays