I'm writing a WxPerl program and instead of
$panel->SetDropTarget( MyTextDropTarget->new($panel) );
我写了
$panel->SetDropTarget->( MyTextDropTarget->new($panel) );
Perl没有抱怨。(Perl调用了某个带有一些参数的函数,脚本出现了错误并显示了以下错误信息:
Usage: Wx::Window::SetDropTarget(THIS, target) at ./x.pl line 230.
我很好奇Perl是如何解析'错误'版本的。
添加编辑:
好的,如果$x = \&some_function,那么我理解为什么会这样。
$x->($arg1, $arg2, ...)
调用了一些函数some_function($arg1, $arg2, ...)。
runrig的例子是其中一种可能性,但我非常确定: 1)$panel包含一个经过blessed处理的对象引用,而不是一个字符串。 2)SetDropTarget是$panel的一个基类方法。
从错误信息中我们可以推断出正在调用SetDropTarget()。如果runrig的例子仍然适用于这里(我猜它确实适用),那么即使SetDropTarget后面没有括号,也就是说我有
$panel->SetDropTarget->
替换为
$panel->SetDropTarget()->
Perl仍在调用SetDropTarget吗?(它检查其参数的数量和类型,然后在运行时致命地抱怨)。这是发生的事情吗?
$foo->bar()
可以写成$foo->bar
。这就是为什么$panel->SetDropTarget->(...)
被理解为$panel->SetDropTarget()->(...)
的原因。 - ruakh