Chinaunix
标题:
问段代码 这个sub { ${ $_[0] } } 啥意思?
[打印本页]
作者:
3gtan
时间:
2010-04-07 11:40
标题:
问段代码 这个sub { ${ $_[0] } } 啥意思?
本帖最后由 3gtan 于 2010-04-07 13:38 编辑
package ShiftString;
use overload
'>>' => \&right_shift,
'""' => sub { ${ $_[0] } };
sub new {
my $class = shift;
my $value = shift;
return bless \$value => $class;
}
sub right_shift {
my ($x, $y) = @_;
my $value = $x;
substr($value, -$y) = "";
return bless \$value => ref($x);
}
$camel = ShiftString->new("Camel");
$ram = $camel >> 2; #****************貌似 $camel 调用 overload的 “” 返回 dereference “Camel” 才对啊。
print $ram; # Cam
复制代码
sub right_shift {
my ($x, $y) = @_;
my $value = $x;
substr($value, -$y) = "";
return bless \$value => ref($x);
}
这部分里面my $value = $x; 应该是$value = $$x;
我的理解是 匿名数组 返回 第一个参数的 dereference
但是看这个例子 貌似 $camel 应该返回 字串符
然后 sub right_shift
里面竟然用 $$X 又一次 dereference????
作者:
3gtan
时间:
2010-04-07 12:55
不能连续输入两个$$啊
code里面
my $value = $$x;
的
作者:
3gtan
时间:
2010-04-07 13:00
本帖最后由 3gtan 于 2010-04-07 13:56 编辑
我在
sub right_shift {
my ($x, $y) = @_;
my $value = $$x;
print $x,$$x,"\n";
substr($value, -$y) = "";
return bless \$value => ref($x);
}
的里面加上print了
结果是 $x 和$$x 的结果一样??
为啥呢?
作者:
nuclearxin
时间:
2010-04-07 14:14
.....难道 在 sub里面 “” 已经起作用啦?????
作者:
nuclearxin
时间:
2010-04-07 15:12
貌似看出来啦
有个优先级的问题吧
发现被“”的overload发生在 被bless 之后的 reference;这就是为啥 print $x,$xx,一样的原因
还有就是 $camel >> 2
是 “”先作用还是 >> 先作用?
貌似是 >>先作用 忽略“”啦
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2