是否有更优雅的方式来处理来自命令行参数的输入,或者STDIN如果命令行上没有给出任何文件?我目前正在这样做:
sub MAIN(*@opt-files, Bool :$debug, ... other named options ...) {
# note that parentheses are mandatory here for some reason
my $input = @opt-files ?? ([~] .IO.slurp for @opt-files) !! $*IN.slurp;
... process $input ...
}
Run Code Online (Sandbox Code Playgroud)
而且还不错,但我想知道我是否缺少一些更简单的方法?
我希望在使用时能够链接到侧边栏中自动生成的索引sphinx-rtd-theme.我已经尝试将它添加到toctree:
.. toctree::
first
second
Index <:ref:`genindex`>
Run Code Online (Sandbox Code Playgroud)
但这导致了
WARNING: toctree contains reference to nonexisting document u':ref:`geinindex`'
Run Code Online (Sandbox Code Playgroud)
从狮身人面像,没有其他影响.
我想我可以简单地在主题layout.html文件中对索引进行硬编码,但也许有更好的方法,而不是涉及修改标准主题?
TIA任何提示!
我正在尝试开始使用一个非常简单的Google表单,其中只包含几个问题(只有2个选项和一个简短文本的多项选择).创建它之后,我打开了脚本编辑器并输入了
function onSubmit(e) {
Logger.log("onSubmit(%s)", JSON.stringify(e));
}
Run Code Online (Sandbox Code Playgroud)
并onSubmit使用"编辑"菜单中的"当前项目的触发器"将其配置为"表单提交"触发器的处理程序.
填写表单并立即提交它会导致处理程序被调用,但我只在日志中看到:
[17-04-15 18:56:23:584 CEST] onSubmit({"response":{},"source":{},"authMode":{},"triggerUid":1870249629})
Run Code Online (Sandbox Code Playgroud)
即响应字段为空.我也尝试过使用FormApp.getActiveForm().getResponses(),但它也会返回一个包含几个空对象的数组(OTOH,FormApp.getActiveForm().getTitle()会返回我给表单的标题).
我怀疑我需要给脚本一些额外的权限来访问表单数据,但是我不知道怎么做,即使这确实是问题.
有谁知道为什么我没有得到表格价值,我该怎么做才能得到它们?提前致谢!
我可以写这样的东西(elem这是一个XML::Element,但这并不重要):
for $elem.nodes {
when XML::Element { ... }
when XML::Text { ... }
...
default { note qq{Ignoring unknown XML node "$_".} }
}
Run Code Online (Sandbox Code Playgroud)
$_看起来不错,但没有给我使用它的代码内部的可读名称,这就是为什么我更喜欢这样写:
for $elem.nodes -> $child {
when XML::Element { ... }
when XML::Text { ... }
...
default { note qq{Ignoring unknown XML node "$child".} }
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为现在还$_没有设置,所以我实际上需要写
for $elem.nodes -> $child {
given $child {
when XML::Element { ... }
when XML::Text { ... }
...
default …Run Code Online (Sandbox Code Playgroud) 假设我有一个包含以下标记的语法
token paragraph {
(
|| <header>
|| <regular>
)
\n
}
token header { ^^ '---' '+'**1..5 ' ' \N+ }
token regular { \N+ }
Run Code Online (Sandbox Code Playgroud)
问题是,以 开头的行将---++Foo被解析为常规段落,因为“Foo”之前没有空格。在这种情况下,我想使解析失败,即以某种方式“提交”到该交替分支,例如在看到---我想要成功解析标头或完全失败匹配之后。
我怎样才能做到这一点?我看到的唯一方法是在之前使用否定先行断言来<regular>检查它是否不以 开头---,但这看起来相当丑陋且不切实际,考虑到我的实际语法不仅仅只有这两个分支。有更好的办法吗?提前致谢!
如果我的语法中有这样的内容:
grammar G {
token tab-indent(Int $level) {
# Using just ** $level would require <!before \t> to have the same effect, so use a code block for simplicity.
\t+ <?{ $/.chars == $level }>
}
}
Run Code Online (Sandbox Code Playgroud)
$level有没有办法直接获取相应动作中的值method tab-indent($/)?
现在我也在$/.chars那里重做,这有效,但似乎并不理想,特别是在更复杂的情况下,其中参数的值不太容易从匹配的文本中推断出来。
有谁知道更好的方法来做到这一点?提前致谢!
使用我的语法使用简单的语法解析数百个文件
for @files -> $file {
my $input = $file.IO.slurp;
my $output = parse-and-convert($input);
$out-dir.IO.add($file ~ '.out').spurt: $output;
}
Run Code Online (Sandbox Code Playgroud)
循环相对较慢,在我的机器上大约需要 20 秒,因此我决定通过这样做来加快速度:
my @promises;
for @files -> $file {
my $input = $file.IO.slurp;
@promises.append: start parse-and-convert($input);
}
for await @promises -> $output {
$out-dir.IO.add($file ~ '.out').spurt: $output;
}
Run Code Online (Sandbox Code Playgroud)
这有效(至少在我的真实代码中,即对这个说明性示例中的任何拼写错误取模),但加速比我希望的要少得多:现在需要大约 11 秒,即我只获得了两倍。当然,这是值得重视的,但看起来存在很多争用,因为该程序使用的 CPU 数量少于 6 个(在有 16 个 CPU 的系统上),并且有相当多的开销(因为我没有得到6 加速都没有)。
我已经确认(通过插入一些say now - INIT.now)几乎所有运行时间都真正花费在内部await,如预期的那样,但我不知道如何进一步调试/分析它。我在 Linux 下执行此操作,因此我可以使用 perf,但我不确定它在 Raku 级别对我有何帮助。
有没有一些简单的方法可以提高这里的并行度?
编辑:为了说清楚,我可以忍受 20 秒(好吧,现在是 30 秒,因为我添加了更多东西)运行时间,我真的很好奇并行度是否可以在这里以某种方式提高,而不 …
我正在尝试按照http://www.erlang.org/doc/installation_guide/INSTALL.html上的文档安装Erlang/OTP
.我在构建Erlang/OTP版本时遇到了问题.当我跑步时make,我得到:
Makefile:247: /home/otp_src_17.0/make/i686-pc-linux-gnu/otp_ded.mk: No such file or directory
make: *** No rule to make target `/home/amiro/otp_src_17.0/make/i686-pc-linux-gnu/otp_ded.mk'. Stop.
Run Code Online (Sandbox Code Playgroud)
这里有没有人遇到过这种问题?
我需要使用TWiki 标记将数百个文本文件转换为更标准的标记语言(例如 Markdown 或 Asciidoc),并且,因为似乎没有任何可用的工具来执行此操作(pandoc 支持 TWIki 但非常差,即它不仅不可挽回地丢失了很多标记,而且还丢失了很多内容),我想在 Raku 中编写自己的转换器。
乍一看,似乎使用 Raku 语法来完成这项任务是合适的,但我有点担心我可能会遇到一些损坏的标记的问题——我仍然需要以某种方式处理这些问题。那么坚持手动正则表达式以获得更大的灵活性会更明智吗?
如果有人有使用 Raku 语法解析标记的经验,可以分享一下吗?蒂亚!