0

大脑在这件事上变得模糊不清。我想将我的骰子游戏从使用 rand() 改为使用 random.org 中的随机值列表。我能够很好地检索值,我只是挂断了从列表中弹出的语法。

这是我适合的功能:

sub roll_d
{
  return (pop($$dice_stack{@_[0]}));
  # Original code:
  #return (int(rand @_[0]) + 1);
}

其中 $dice_stack 是指向散列的指针,其中键是骰子类型('6' 代表 d6,'20' 代表 d20),值是介于 1 和骰子类型之间的整数数组。

4

2 回答 2

7

$$dice_stack{@_[0]}- aka $dice_stack->{@_[0]}- 是 hashref 中的一个 VALUE。因此,它必然是一个标量,不能是一个可弹出数组。

如果该值是数组引用,则需要取消引用:

  return ( pop(@{ $dice_stack->{ @_[0] } }) );

如果它不是 arrayref,则需要以其他方式访问它。

此外,这开始看起来有点像高尔夫 - 在这个线路噪音点,我建议切换到更具可读性的代码(恕我直言):

  my ($dice_type) = @_;
  my $dice_list = $dice_stack->{$dice_type};
  return pop(@$dice_list);
于 2011-08-29T19:05:15.970 回答
1

首先尝试取消引用数组:

pop(@{$dice_stack{@_[0]}})
于 2011-08-29T19:05:06.520 回答