Dan*_*ita 6 program-entry-point subroutine raku
我希望脚本运行从模块导出的子例程,而导出的子例程将在脚本中作为MAIN运行。该子例程执行我想要的所有操作,除了它返回结果而不是打印结果。
RUN-MAIN 似乎可以达到我的目标,但是我不确定如何获取例程的返回值。
有什么方法可以捕获要打印的RUN-MAIN例程的输出?RUN-MAIN是否适合这种事情?
您可以使用函数组合运算符infix:<?>或infix:<o>
sub foo ($name, Int $n=1) {
"Hello $name\n" xx $n
};
RUN-MAIN &say o &foo, Nil; #or &foo Ro &say
Run Code Online (Sandbox Code Playgroud)
但不幸的是,它正在改变签名
sub foo ($name, Int $n=1) {
"Hello $name\n" xx $n
};
say &foo.signature;
say (&foo Ro &say).signature;
Run Code Online (Sandbox Code Playgroud)
因此默认USAGE消息不起作用。
可以在包装例程中使用重新调度来调用原始例程。say然后可以用于包装内重新调度的结果。这也将生成原始例程的用法。
sub foo (
$input #= The data we want
) {
return $input;
}
&foo.wrap( sub (|) { callsame.say } );
RUN-MAIN &foo, Nil;
Run Code Online (Sandbox Code Playgroud)
$ raku filename.raku
Usage:
filename.raku <input>
<input> The data we want
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |