【发布时间】:2014-04-30 19:37:41
【问题描述】:
在 Perl/Tk 中,可以为小部件定义文本变量。它是对保存该值的某个标量的引用。 有人向我展示了如何使用 Moose 属性强制将 Moose 属性用作文本变量(酷!)。它是这样工作的:
subtype 'TkRef' => as 'ScalarRef';
coerce 'TkRef', from 'Str', via { my $r = $_; return \$r };
has 'some_val' => (is => 'rw', isa => 'TkRef', coerce => 1, default => 'default value');
$mw->Entry(-textvariable => $self->some_val);
$mw->Label(-textvariable => $self->some_val); # will always Show what we type into the entry
但是,当我想为属性设置一个新值时,我必须像这样取消引用它:
${$self->some_val} = 'blarg'; # dereference
简单地设置属性是行不通的,因为引用需要在对象的生命周期内保持不变(即属性值本身不能改变)。
有没有办法使用漂亮的 Moose 属性强制功能而不失去使用 $self->some_val('blarg'); 设置属性的可能性?某种反向强制?
【问题讨论】: