代码之家  ›  专栏  ›  技术社区  ›  Eric Strom

Perl中是否有方法重载/拦截重载对象上的函数调用?

  •  3
  • Eric Strom  · 技术社区  · 14 年前

    以类似于重载运算符的方式,是否有方法对变量应用某种魔力,以便:

    my $magic_var = ...;
    
    some_function($magic_var);
    

    会导致如下结果:

    call_function(\&some_function, $magic_var)
    

    如果 some_function 没有定义,我可以用 AUTOLOAD sub来捕捉调用,但是当它被定义时,我不知道拦截调用的方法(不需要在调用方的所有sub周围插入包装器,或者暂时取消定义所有sub之类的疯狂操作)。

    另一种说法是我想写 use overload sin => \&my_sin; 但有 sin 任何函数,并让它调用 nomethod 当重载对象在函数调用中使用时,与sub类似。

    编辑:

    根据大家的要求,我之所以要研究这个问题,是因为我正在研究perl5版本的perl6,不管它是什么恒星。然而,在进一步研究perl6实现之后,它似乎也不处理被调用的函数 Whatever ,所以我似乎不必尝试处理函数调用(只是运算符和方法调用)。

    如果有人感兴趣,该模块将在CPAN上运行: Whatever .

    欢迎反馈/评论。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jonathan Leffler Toon Krijthe    14 年前

    你能用 tie 机制?