我正在写一个WxPerl程序,而不是
$panel->SetDropTarget( MyTextDropTarget->new($panel) );
Run Code Online (Sandbox Code Playgroud)
我写
$panel->SetDropTarget->( MyTextDropTarget->new($panel) );
Run Code Online (Sandbox Code Playgroud)
并且Perl没有抱怨.(Perl使用一些参数调用了一些函数,并且脚本错误输出并显示错误消息:
用法:位于./x.pl第230行的Wx :: Window :: SetDropTarget(THIS,target).
新增编辑:
好的,所以如果$ x = \&some_function,那么我理解为什么
$x->($arg1, $arg2, ...)
Run Code Online (Sandbox Code Playgroud)
调用some_function($ arg1,$ arg2,.....).
runrig的例子是一种可能性,但我很确定:1)$ panel包含一个受祝福的对象引用,而不是一个字符串.2)SetDropTarget是$ panel的一个方法(在基类中).
从错误消息中我们可以假设正在调用SetDropTarget().如果runrig的例子在这里仍然适用(我猜它确实如此),那么即使SetDropTarget后面没有括号,即我有
$panel->SetDropTarget->
Run Code Online (Sandbox Code Playgroud)
代替
$panel->SetDropTarget()->
Run Code Online (Sandbox Code Playgroud)
Perl还在调用SetDropTarget吗?(检查其参数的数量和类型,然后在运行时致命抱怨).这是怎么回事?
因为它是完全有效的语法.$panel->SetDropTarget->( MyTextDropTarget->new($panel) )表示" &SetDropTarget从中调用方法$panel,然后取消引用&SetDropTarget返回的子参数".我猜这不是你想写的,但是任何错误都会在运行时出现,即使在严格模式下也是如此.
您的SetDropTarget可能不会返回代码引用,但在运行时之前您无法确定:
#!/usr/bin/perl
my $panel = 'main';
$panel->SetDropTarget->("bloomin'");
sub SetDropTarget {
return sub { print "Set the $_[0] drop target!\n" }
}
Run Code Online (Sandbox Code Playgroud)