小编gat*_*eta的帖子

评估Readonly变量两次时的结果不同

我注意到,对于使用Readonly模块声明的变量,多次计算变量会产生不同的结果.

>perl -Mbigint -MReadonly -wE "Readonly my $V => 1; foreach (1..2) { say 0 + '1000000000000001' * $V };
1000000000000000
1000000000000001
Run Code Online (Sandbox Code Playgroud)

这是为什么?这似乎是第一次在字符串中解释变量,第二次在数字上下文中.我的猜测是,如果它是数字,Math::BigInteger模块将重载'*'运算符,产生精确的结果.这是Readonly模块中的错误,有什么办法可以避免这种情况吗?

我没有使用perl 5.10和Readonly 1.03 Readonly::XS.

我可以重现那个

  • v5.10.0on MSWin32-x86-multi-thread(ActivePerl)
  • v5.10.0在linux上x86_64-linux-thread-multi.
  • v5.12.0 在Windows上(ActivePerl)

但是,我并没有v5.14.2(ActivePerl).

我也用Readonly 1.04复制了它.我不太确定这是否相关,但Scalar::Util::looks_like_number表现相似:

>perl -MReadonly -MScalar::Util -Mbigint -wE "say $Readonly::VERSION; Readonly my $V => 1; foreach (1..2) { say Scalar::Util::looks_like_number $V; }"
1.04
0
1
Run Code Online (Sandbox Code Playgroud)

perl operator-overloading biginteger readonly tie

7
推荐指数
1
解决办法
162
查看次数

checkstyle 中方法局部常量的命名

java 方法局部常量应该如何命名?

如果常量仅在方法的上下文中使用,则应在方法内部声明它(作为变量final)。但应该使用什么语法呢?对我来说,最易读的方法是使用ALL_CAPS,但 checkstyle 似乎不同意:

int compute(int n) {
    final int FACTOR = 27;
    return FACTOR * n;
}
Run Code Online (Sandbox Code Playgroud)

将产生 checkstyle 警告:

Name 'FACTOR' must match pattern '^[a-z][a-zA-Z0-9]*$'.
Run Code Online (Sandbox Code Playgroud)

另请参阅:您对方法作用域常量有何看法?

java constants checkstyle

6
推荐指数
1
解决办法
4394
查看次数

Perl崩溃:在线程中错误地使用了glob?

以下脚本在perl 5.16中崩溃.glob()在线程中使用有什么问题吗?

use strict;
use warnings;
use 5.010;

use threads; 

sub f { 
    my $no = shift; 
    my @arr = glob("*"); 
    say "thread $no: ", scalar(@arr); 
} 

foreach my $tno (1..5) { 
    my $thr = threads->create(\&f, $tno); 
    $thr->join(); 
}
Run Code Online (Sandbox Code Playgroud)

它打印

thread 1: 33
Run Code Online (Sandbox Code Playgroud)

然后崩溃与分段错误(MacOS)或访问冲突(Windows 7).用v5.16.2 on Mac OSX (darwin-thread-multi-2level)和测试ActivePerl on Windows 7 64bit (v5.16.3 built for MSWin32-x86-multi-thread).

perl multithreading glob

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