我是Perl的新手,请有人为我解释以下脚本:
#!/usr/bin/env perl
use strict;
use warnings;
sub f1($) { my ($v) = @_; print "f1 $v\n"; }
sub f2(@) { my ($v) = @_; print "f2 $v\n"; }
my $s = "ww";
my @a = ("xx", "yy", "zz");
f1 $s; f1 @a; f2 $s; f2 @a;
Run Code Online (Sandbox Code Playgroud)
我的电脑输出是:
f1 ww
f1 3
f2 ww
f2 xx # why!!
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么第四个输出是xx?我认为它应该是zz,因为当数组转换为标量时,它应该是数组的最后一个元素.
考虑下面的代码,我想让它成为一个线程安全类,以便它永远不会得到奇数:
class Test {
private int value = 0;
private final Object lock;
public void add() {
synchronized (lock) {
value++;
value++;
}
}
public int getValue() {
synchronized (lock) {
return value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我现在怀疑锁定领域,这被宣布为最终的,这有关系吗?或者它会打破线程的安全吗?
我认为如果锁定字段没有被声明为final,那么这应该是一个线程安全的类.如果这个结论有误,请指正,谢谢.