You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建可调用变量以调用带指定参数的类方法?

解决方法

要实现让可调用变量自动传入'up'执行walk方法,有几种实用方式:

方式一:绑定实例的方法引用 + assuming

直接从实例上获取已绑定self的方法引用,再用assuming固定方向参数:

class Person {
    method walk(Str $direction) {
        say "Walking $direction";
    }
}

my $person = Person.new;
my $callable = $person.&walk.assuming('up');
$callable(); # OUTPUT: Walking up

方式二:闭包封装逻辑

用闭包直接把调用逻辑包起来,直观易懂:

my $callable = { $person.walk('up') };
$callable(); # OUTPUT: Walking up

方式三:手动绑定方法的self参数

如果一定要用^find_method,需要先把实例(self)作为第一个参数绑定到方法对象上,再固定方向参数:

my $method = Person.^find_method('walk');
my $callable = $method.assuming($person, 'up');
$callable(); # OUTPUT: Walking up
错误原因说明

你之前的代码出错核心原因是:

  • ^find_method拿到的是未绑定实例的方法对象,它的第一个参数必须是实例(self)。直接调用$person.^find_method('walk')('up')时,只传了'up',缺少self参数,所以报"Too few positionals passed"。
  • 用.assuming('up')后,方法对象的第一个参数被固定为'up',当你用$person.$callable()调用时,Perl 6会自动把$person作为参数传给这个可调用对象,导致原本应该接收Str类型$direction的位置收到了Person实例,触发类型检查错误。

内容的提问来源于stack exchange,提问作者Jim Bollinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:08