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

Perl 6类方法返回正则表达式报错:无法访问对象属性求解决

解决Perl 6正则中无法访问对象属性的问题

我明白刚学Perl 6类时碰到这种问题的困惑,你遇到的编译错误,核心原因是Perl 6的正则表达式有独立的作用域,默认无法直接访问对象的属性。下面给你两种简单可行的解决办法:

方法一:先把属性值存到方法局部变量中

先在reg方法里将$!str赋值给一个局部变量,再在正则里使用这个变量——因为局部变量的作用域能被正则的闭包捕获:

class TEST {
    has Str $.str;
    method reg {
        my $str = $!str;  # 把属性值转存到方法内的局部变量
        return rx/ << <[abc]> * $str <!before foo> /;
    }
}
my $var = TEST.new(str => 'baz');
say $var.reg;

方法二:用正则插值语法<{ ... }>

Perl 6支持在正则中嵌入Perl代码块,用<{ }>包裹的代码会在正则编译时执行,并且能直接访问当前方法的作用域(包括对象属性):

class TEST {
    has Str $.str;
    method reg {
        return rx/ << <[abc]> * <{ $!str }> <!before foo> /;
    }
}
my $var = TEST.new(str => 'baz');
say $var.reg;

为什么原来的代码会报错?

Perl 6里的正则表达式本质是一种特殊的方法,它们拥有自己的作用域上下文,默认情况下无法直接引用外部方法(也就是reg方法)中的对象属性$!str,所以编译器会提示属性不可用。

内容的提问来源于stack exchange,提问作者Eugene Barsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:34