【问题标题】:How do I pass additional arguments in wxperl EVT_BUTTON如何在 wxperl EVT_BUTTON 中传递其他参数
【发布时间】:2014-07-03 01:33:00
【问题描述】:

我正在尝试将参数传递给处理 wxPerl EVT_BUTTON 事件的 perl 子例程。我明白当我使用时:

EVT_BUTTON($frame, $button, \&onClick);

我将可以在onClick 中访问 $frame 和 $button 及其函数。但是,我试图让子例程读取其他参数,主要是各种其他 Wx::CheckBox 值的值/状态。

我看到这项工作的唯一方法是使用全局变量并让onClick 读取它们,但我想在其他地方重用onClick,并且使用全局变量是我最不喜欢的选项。

我尝试了各种方法,但都失败了,例如:

EVT_BUTTON($frame, $button, \&onClick(arg1,arg2));

我认为解决方案在于理解 Perl 引用是如何工作的,因为我们通过 \&onClick 和前面的 \& 指示符。但是我缺乏 Perl 方面的知识...

感谢任何帮助

【问题讨论】:

  • 为什么用c++标记?
  • 我以为wxWidget本来是用C++写的,所以有关系,不好意思不是

标签: c++ perl wxwidgets wxperl


【解决方案1】:

试试这个,

EVT_BUTTON($frame, $button, sub{ onClick($arg1,$arg2) });

引用anon子程序,然后调用onClicksub,相当于:

my $subref = sub{ onClick($arg1,$arg2) };
EVT_BUTTON($frame, $button, $subref);

【讨论】:

  • 哇.. 确实有效!谢谢!你能解释一下这个解决方案背后的逻辑吗?
  • 在其作用域之外访问词法变量($arg1, $arg2)的匿名子程序称为闭包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多