gpt4 book ai didi

raku - 无法插入尝试模拟 EXPORT_OK 标记

转载 作者:行者123 更新时间:2023-12-03 23:00:38 25 4
gpt4 key购买 nike

我无法插值 ::GLOBAL::EXPORT($var):: .我究竟做错了什么?
我正在尝试使用导出,因为它们有时很难优化。
我尝试为一组常量生成标签。
实际上,一些常量在模块范围内是可见的,但其中一些在 TAG 中只是为了分隔它们并按需使用它们。
但是我的问题的目的只是为了理解为什么我不能插入看起来很容易的东西。
该错误是 new 的异常;我现在已经失去了踪迹。
请参阅下面的代码。

unit module TestImports;

sub bar is export { say "bar sub" }
sub baz is export { say "baz sub" }
my $var = 'He heu hey';
my $aar = 'He heu hey';
my $vaa = 'He heu hey';
my $kar = 'He heu hey';
my $vor = 'He heu hey';
constant A = 333;
constant APPART is export(:AP) = 174;

constant COLOR_A = 24;
constant COLOR_B = 84;
constant COLOR_C = 88;
constant COLOR_D = 92;
constant COLOR_E is export(:SPECIAL)= 144;
constant COLOR_F = 98;
constant COLOR_G = 118;
constant COLOR_H = 214;
constant COLOR_I = 800;


my package EXPORT::MYTAG {
#filter the colors;
my %c = TestImports::.grep(*.key.match(/^ ( COLOR_ <[A..Z]>+ ) $ /));
#filter allready in TAG exported : so we exclude those that we do not want.
my %e = EXPORT::.grep( *.key.grep( none /^ : ( ALL || DEFAULT || MYTAG ) $ /));

#This nearly works but will fail for :SPECIAL Tag because it's yet exported :(
for %c {
next if .key eq 'EXPORT';
.key.say;
OUR::{.key} := .value;
}
#NOTE: So we must exclude, :SPECIAL (and ev. others) building a loop with e.
#IF i did well red the doc ALL SPECIAL should be in GLOBAL::EXPORT::SPECIAL::%(kv);
#and
::GLOBAL::EXPORT::SPECIAL::.raku.say => WORKS; ==> (COLOR_E(80)) SO:
for %e.kv -> $k,$v {
#HERE IS THE QUESTION!!!!!!
::GLOBAL::EXPORT::($k)::.raku.say; #SHOULD WORK but does not: WHY.
}

}
仅用于测试的主要脚本就是这个。
#!/bin/env raku
use TestImports :DEFAULT, :MYTAG :AP ;

#Most of the time : Everything works!but it should work always
say TOTITOTO;
say INTER;
say WANDER;
say WANDER_FULL;
say WANDER3FULL;
say APPART;
say TestImports::A;

#say COLOR_INTER;
bar();
baz();

Thing.new.foo;

最佳答案

这个答案几乎不是一个答案,但是你的问题几乎不是一个问题,所以也许一切都平衡了。 ;)

Cannot interpolate trying to emulate EXPORT_OK Tag


我用谷歌搜索“EXPORT_OK”。是 Perl。它的简单形式似乎很简单。你为什么不坚持简单的标签?

I cannot interpolate ::GLOBAL::EXPORT($var)::


没有像 GLOBAL::EXPORT 这样的包. EXPORT Rakudo 生成的是一个词法包(用 my 声明)而不是全局包(用 our 声明)。您的 EXPORT::MYTAG使用 my 显式声明包. ::GLOBAL::EXPORT($var)尝试调用一个包,就好像它是一个也不起作用的函数。但这大概只是一个错字。
猜测你的意思是 EXPORT::($var)或类似的东西。
我不知道您真正想要什么,因为您的代码无法编译并且太长且困惑。

I'm trying to play with exports because they are hard to optimize sometimes.


如果您的意思是 Perl 导出,那么 Raku 不是 Perl。
如果您的意思是 Raku 导出和平均性能,请分享您的 --profile 结果。如果您指的是优化的其他方面,请澄清那是什么。

In reality a few constants are in visible in module scope, but some of them, are in a TAG just to separate them and to use them on demand.

constant声明符有一个隐含的 our默认情况下声明符。如果你不想这样,请输入 my在前面,即 my constant ... .

But the objective of my question is just to understand wy i cannot interpolate what should seam to be very easy.


如果以上内容没有回答您的问题,请制作一个更简短、更简洁的版本,然后我们可能会提供帮助。

The error is an exception with new, i'v lost the trace for now.


我在您删除的“答案”中看到的错误是:

Failure.new(exception => X::NoSuchSymbol.new(symbol => "GLOBAL::EXPORT::SPECIAL"))


那是 Failure值(这是一个包含未引发异常的错误值,允许代码继续运行,前提是没有任何尝试使用错误值,就好像它没问题一样)。
它说没有像 NoSuchSymbol 这样的符号( GLOBAL::EXPORT::SPECIAL ) .这是正确的,因为没有这样的符号/包,正如这个答案开头附近所解释的那样。

我在您删除的“答案”下的评论中看到了这一点:

I think the example is too long


是的。我很确定,无论您要问的是什么,都应该用不到 10 行代码就可以问到。见 Minimal Reproducible Example有关如何最好地提出问题的进一步指导。
但我怀疑主要问题比这更基本。
如果您在导出 Raku 时遇到问题,那么您可能只是使用不正确。
如果您正确使用它,那么在考虑尝试优化任何东西之前,首先要做的是使用 --profile符合 Knuth 的格言“过早的优化是万恶之源”并分享您的结果。

关于raku - 无法插入尝试模拟 EXPORT_OK 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66026115/

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