标签: anonymous-arrays

如何用'空槽'创建一个匿名数组([])?

我可以在其中创建一个带有"空插槽"的数组:

$ 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值".

感谢您的任何见解.

perl anonymous-arrays

5
推荐指数
1
解决办法
1777
查看次数

强制转换匿名二维数组

是否可以创建这样的匿名数组?

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)

c arrays pointers casting anonymous-arrays

4
推荐指数
1
解决办法
67
查看次数

匿名数组索引而不是switch语句?

在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

2
推荐指数
1
解决办法
428
查看次数