我觉得有点奇怪,在指定时我必须匿名包装定义的子例程-command
Tkx 小部件的参数。
摘录自TkDocs 教程演示了这一点:
my $cb = $frm->new_ttk__button ( -text => "Calculate",
-command => sub {calculate();} );
sub calculate {
$meters = int(0.3048*$feet*10000.0+.5)/10000.0 || '';
}
为什么我写的时候不起作用-command => &calculate()
or -command => \&calculate()
?
你的语法不太正确。您的示例调用子例程(&
绕过任何原型)并传递返回值(&calculate()
)或对其的引用(\&calculate()
)到-command
选项。您想要分配对子例程本身的引用,可以通过以下方式完成:
-command => \&calculate
请注意缺少尾括号。另请注意,您不能以这种方式传递参数。如果您想这样做,您需要将调用包装在匿名子例程中:
-command => sub { calculate(12) }
或者向选项传递 ARRAY 引用而不是 CODE 引用:
-command => [\&calculate, 12]
如果您使用变量而不是文字值,这两种形式之间存在细微的差别,这一点很重要。
-command => sub { calculate($x) } # creates a closure over $x
-command => [\&calculate, $x] # makes a copy of $x
使用第一种形式更改为$x
调用命令时将可见。在第二种形式下,他们不会;每次调用都会看到创建绑定时的值。两种形式都很有用;您只需要在决定使用哪个时进行良好的判断即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)