【问题标题】:How to execute raku script from interpreter?如何从解释器执行 raku 脚本?
【发布时间】:2021-10-24 01:28:10
【问题描述】:

我这样打开 raku/rakudo/perl6:

con@V:~/Scripts/perl6$ perl6
To exit type 'exit' or '^D'
> 

上面的环境叫“解释器”吗?我一直在寻找,我找不到它叫什么。

如何像我一样执行 rakudo 脚本

source('script.R') 在 R 中,还是在 python3 中 exec(open('script.py').read())

为了澄清,我希望脚本中的函数和库在 REPL 中可用,run 似乎没有这样做。

我确定这存在于文档中某处,但我找不到它:(

【问题讨论】:

  • 您只是想执行脚本文件,还是希望文件中定义的函数在 REPL 中可用?
  • @rajashekar 我想要 REPL 中可用脚本中的库/模块和函数
  • 如果在 Linux/Unix shell 命令行中,您键入 raku 后跟脚本名称 my_raku_script.p6rakudo 编译器/解释器将为您执行 my_raku_script.p6。如果在 Linux/Unix shell 命令行中键入 raku 然后返回,rakudo 编译器/解释器会为您打开一个 REPL。
  • .@con 我猜如果您愿意在脚本中调用the repl function Liz added to Rakudo,今年早些时候的the repl function Liz added to Rakudo 会成功。但是 Raku 文档中没有提到它(如果它是 Rakudo 特定的,这很公平,我想它是),我也没有在其他地方找到它(这不是很酷,但可能是我缺乏搜索技能/耐心),我也没有设法让它工作。无论如何,也许 .@Liz 会阅读此内容并提供答案...

标签: raku rakudo


【解决方案1】:

正如 Valle Lukas 所说,没有确切的替代品。但是,所有常用功能都可以运行外部程序,

  • shell("raku multi-dim-hash.raku") 将作为外部程序运行。
  • IIRC,source 也评估了源。因此,您可能希望使用require,尽管不会直接导入符号,您必须为此使用间接查找。
  • 您也可以在加载的模块上使用EVAL,但同样不会导入变量和符号。

【讨论】:

  • 嗨@JJ。 ❶ 你知道如何让repl 函数工作吗? (根据我对 .@con 问题的评论,Liz 介绍给 Rakudo 的那个人。)我尝试过,但未能让它发挥作用。 ❷ 如果您可以,我认为如果您运行.@con 的程序(脚本)并且从该程序中调用repl 函数,那么我认为是对的吗?全局变量/符号(甚至可能是词法的?)在 REPL 中是否可以访问? ❸ 这种能力是可重入的,即如果一个人启动一个 REPL,然后从那里调用一个调用 repl 的程序(以获取内部 REPL),那么内部 REPL 的功能是否与外部 REPL 一样正确?
  • @raiph 我什至不知道它的存在......
  • .@JJ 啊。唔。如果您可以使其正常工作(也许问 Liz?),并且❷成功了,那么我会说这将是对您的答案非常有价值的补充(和/或如果有人添加了另一个描述它的答案,那就太好了)。我不确定它是要成为 Raku 的一部分还是只是 Rakudo(我认为是后者),即使它只是 Rakudo,我也可以想象它并不是要成为官方支持的东西,但无论哪种方式似乎很重要。 @con 不能是唯一一个希望能够运行程序并访问其符号的人,包括它导入的符号。
【解决方案2】:

它被称为读取-评估-打印循环REPL。您可以直接在 shell 中执行 raku 脚本:raku filename.raku,无需 REPL。要从 REPL 运行代码,您可以查看 run (run <raku test.raku> ) 或 EVALFILE

rosettacode 页面Include a file 有一些信息。但目前您的 R source('script.R') 示例似乎没有完全替代品。

【讨论】:

  • 如何从 REPL 中可用的脚本中获取模块和库?
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多