gpt4 book ai didi

grammar - 如何改变语法对象中的捕获?

转载 作者:行者123 更新时间:2023-12-05 02:30:39 26 4
gpt4 key购买 nike

我正在尝试使用以下方法修改已解析的 Grammar 对象中的值:

method mutate(Match:D $match --> Match:D) {
for $match.values -> $line {
when $line<content><header-toc><header><taskwiki-content><taskwiki-divider> {
say 'here';
$line<content><header-toc><header><taskwiki-content><taskwiki-divider>.replace-with('');
say $line; # has not been modified;
}
};
return $match;
}

我没有收到任何错误,但是 $match 对象不受我正在运行的 replace-with 方法的影响。

最佳答案

How do I mutate captures in a Grammar object?

你不能。 (好吧,您可以通过 make 将数据从它们中挂起,但您不能做您认为可以做的事情。)


Match 对象存储与某个字符串匹配的结果,任何捕获只是 .from.to 索引到该字符串原始字符串。

例如,如果您编写 "bar".match(/a/),生成的 Match 对象存储 .match 方法的invocant "bar".from1.to2 表示捕获的 "a" 子字符串。

原始字符串保持不变,捕获的子字符串可以说是“虚拟的”,您无法更改任何内容。


foo.replace-with('');

replace-with 不修改其调用者。它只返回一个值(一个新的字符串)。

引用 the replace-with doc ,加上我的大胆强调:

Returns the invocant string where the Match object is replaced by $replacement.

请注意,它不是“调用Match 对象”。

.replace-with 方法返回一个新的string,它是与匹配的原始input 字符串的副本 生成 Match 对象,匹配的位替换为作为 .replace-with 方法参数提供的字符串。

关于grammar - 如何改变语法对象中的捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71790025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com