【问题标题】:Dynamic variable @*INC not found未找到动态变量 @*INC
【发布时间】:2016-02-12 00:55:12
【问题描述】:

所以我一直在尝试让 Electron 与 Perl6 一起工作,看起来在我努力破解东西以让它们工作之后,它只是不想这样做。我使用了以下脚本(来自 git 上的电子仓库的示例之一):

#!/usr/bin/env perl6

use v6;

use Electron;

my $app = Electron::App.instance;
LEAVE {
  $app.destroy if $app.defined;
}

say Electron::Dialog.show-open-dialog.perl;

say Electron::Dialog.show-save-dialog.perl;

say Electron::Dialog.show-message-box.perl;

Electron::Dialog.show-error-box("Text", "Content");

prompt("Press any key to exit");

运行时出现此错误:

Dynamic variable @*INC not found
  in submethod initialize at C:\rakudo\share\perl6\site\sources\42D84B59BC3C5A414EA59CC2E3BC466BBAF78CDA line 54
  in method instance at C:\rakudo\share\perl6\site\sources\42D84B59BC3C5A414EA59CC2E3BC466BBAF78CDA line 33
  in block <unit> at test.p6 line 9

Actually thrown at:
  in method throw at C:\rakudo/share/perl6/runtime/CORE.setting.moarvm line 1
  in block  at C:\rakudo\share\perl6\site\sources\42D84B59BC3C5A414EA59CC2E3BC466BBAF78CDA line 55
  in submethod initialize at C:\rakudo\share\perl6\site\sources\42D84B59BC3C5A414EA59CC2E3BC466BBAF78CDA line 48
  in method instance at C:\rakudo\share\perl6\site\sources\42D84B59BC3C5A414EA59CC2E3BC466BBAF78CDA line 33
  in block <unit> at test.p6 line 9

查看子方法后,我注意到这是 perl6 的电子模块的一部分,它似乎不喜欢在模块中使用 @*INC

有没有人成功地将电子模块与 Perl6 一起使用?有没有其他人遇到过这个错误?有没有简单的方法?

我可能可以修改模块以使其编译和运行,但我不知道从哪里开始替换 @*INC

【问题讨论】:

  • 如果您在 6.c 之前使用过 Perl 6,您可能需要从头开始。 @*INC 在此之前已被删除,任何提及它都必须处理。
  • 好的,那么模块可能需要更新,是吗?鉴于@*INC 正在模块中使用,我会假设是这种情况。你能给我一些关于如何处理它的指示吗?就像有没有一种方法可以使用其他东西或制作它以便“找到”它?就像我猜的快速修复一样。
  • 我建议您在github.com/azawawi/perl6-electron/issues 提出问题并访问freenode IRC 频道#perl6 并询问
  • @*INC 的替换是 $*REPO。但我对这两个功能的了解都不够,不知道如何修复电子代码。
  • 它需要更多的工作,它还需要使用新的whenever 语法,而不是常规的loop。 (这只是我发现我认为需要更改的第一件事)Perl 6 实际上在上次修改后的几个月里发生了相当大的变化。

标签: electron raku


【解决方案1】:

$*REPO 是 Perl 5 中 @INC 的 6.c 替代品

在 Perl 5 中,@INC 变量是 Perl 查找模块时要搜索的全局路径数组(类似于许多操作系统使用的 PATH 变量来包含当操作系统查找程序时要搜索的路径)。

直到最近 Perl 6 才有对应的 @*INC 变量。

考虑到 Perl 6 模块存储库机制引入的并发模块加载和高级模块选择功能,因此有一个数组不适合 6.c。

在 6.c 之前大约一两个月,一位主要开发人员(Stefan Seifert aka 9)通过新的 $*REPO 标量切换模块加载以使用链式 repo 方法并废弃了包含数组。

出于各种原因,他们在没有弃用期的情况下这样做了。

任何直接提及 @*INC 的 6.c 之前的模块都需要更新,而有些还没有得到更新。 Electron 模块就是这样的——直到您提交了一个问题(谢谢!)并且该模块的作者回复了fixing it

我不知道$*REPO 的任何“官方”设计或最终用户文档。最好的信息可能是通过在 freenode IRC 频道#perl6-toolchain (logs;join) 上询问用户 nine 来找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多