我可以捕获 运行-MAIN 中使用的例程的返回值吗?
Can I capture the returned value of a routine used in RUN-MAIN?
我想要一个脚本 运行 从模块导出的子程序,导出的子程序 运行 作为脚本中的 MAIN。子例程做我想做的一切,除了它 returns 结果而不是打印结果。
运行-MAIN 似乎 实现了我的大部分目标,但我不确定如何获取例程的返回值。
有没有一种方法可以捕获要打印的 运行-MAIN 例程的输出? 运行-MAIN 是处理这种事情的正确方法吗?
以下似乎实现了我的意图(其中 foo
是目标子)。
RUN-MAIN( &foo, Nil );
sub MAIN ( |c --> Nil ) {
foo(|c).say;
}
编辑:不幸的是,这个解决方案并不理想,因为它运行 &foo 两次。
您可以使用函数组合运算符 infix:<∘>
或 infix:<o>
sub foo ($name, Int $n=1) {
"Hello $name\n" xx $n
};
RUN-MAIN &say o &foo, Nil; #or &foo Ro &say
但不幸的是,它正在更改签名
sub foo ($name, Int $n=1) {
"Hello $name\n" xx $n
};
say &foo.signature;
say (&foo Ro &say).signature;
所以默认的 USAGE
消息不起作用。
Redispatch 可以在包装例程中使用以调用原始例程。 say
然后可以用于包装内重新发送的结果。这也将生成原始例程的用法。
sub foo (
$input #= The data we want
) {
return $input;
}
&foo.wrap( sub (|) { callsame.say } );
RUN-MAIN &foo, Nil;
$ raku filename.raku
Usage:
filename.raku <input>
<input> The data we want
我想要一个脚本 运行 从模块导出的子程序,导出的子程序 运行 作为脚本中的 MAIN。子例程做我想做的一切,除了它 returns 结果而不是打印结果。
运行-MAIN 似乎 实现了我的大部分目标,但我不确定如何获取例程的返回值。
有没有一种方法可以捕获要打印的 运行-MAIN 例程的输出? 运行-MAIN 是处理这种事情的正确方法吗?
以下似乎实现了我的意图(其中 foo
是目标子)。
RUN-MAIN( &foo, Nil );
sub MAIN ( |c --> Nil ) {
foo(|c).say;
}
编辑:不幸的是,这个解决方案并不理想,因为它运行 &foo 两次。
您可以使用函数组合运算符 infix:<∘>
或 infix:<o>
sub foo ($name, Int $n=1) {
"Hello $name\n" xx $n
};
RUN-MAIN &say o &foo, Nil; #or &foo Ro &say
但不幸的是,它正在更改签名
sub foo ($name, Int $n=1) {
"Hello $name\n" xx $n
};
say &foo.signature;
say (&foo Ro &say).signature;
所以默认的 USAGE
消息不起作用。
Redispatch 可以在包装例程中使用以调用原始例程。 say
然后可以用于包装内重新发送的结果。这也将生成原始例程的用法。
sub foo (
$input #= The data we want
) {
return $input;
}
&foo.wrap( sub (|) { callsame.say } );
RUN-MAIN &foo, Nil;
$ raku filename.raku
Usage:
filename.raku <input>
<input> The data we want