gpt4 book ai didi

oop - 覆盖方法调用运算符或其他一些方法来捕获方法名称解析错误

转载 作者:行者123 更新时间:2023-12-04 11:33:39 24 4
gpt4 key购买 nike

我正在尝试为 X::NYI 写一个例子作为对 this issue 的响应的类.我想出了这样的事情:

class Nothing {
sub postfix:<.&>( $sub, **@args) {
die X::NYI.new( feature => $sub,
did-you-mean => "nothing",
workaround => "Implement it yourself" );
}
}

my $let's-see = Nothing.newish;

正在尝试重新实现 the method call postfix operator为任何被调用的东西抛出异常。这不起作用:
No such method 'newish' for invocant of type 'Nothing'

在 NYI.p6 第 13 行的块中

而且,事实上,文档说:

Technically, not a real operator; it's syntax special-cased in the compiler.



这很可能意味着它不能被覆盖。这也意味着做我想做的事意味着与 metamodel 互动。拦截类解析方法。但我真的不明白如何做到这一点。 Rakudo 源中的大多数示例,例如 this one , 在调用具体函数时抛出异常,实际上是 the exception we see is thrown by the dispatch method at the Mu level .

覆盖 dispatch 也是如此做这种事情的正确方法是什么?或者其他完全不同的东西?

最佳答案

对我感觉你想要FALLBACK :

https://docs.raku.org/language/typesystem#index-entry-FALLBACK_%28method%29

这将转化为:

class Nothing {
method FALLBACK($name, |c) is hidden-from-backtrace {
die X::NYI.new( feature => $name,
did-you-mean => "nothing",
workaround => "Implement it yourself" );
}
}

my $a = Nothing.newish;
============================
newish not yet implemented. Sorry.
Did you mean: nothing?
Workaround: Implement it yourself
in block <unit> at file line 10

请注意,我还使用了 is hidden-from-backtrace特性以确保 FALLBACK回溯中没有提到方法。

关于oop - 覆盖方法调用运算符或其他一些方法来捕获方法名称解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503564/

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