下面是使用Rakudo的REPL会话。
> my Int $x = 1
1
> dd $x
Int $x = 1
Nil为什么在Nil输出的第二行上有一个dd
发布于 2020-05-20 22:38:21
> sub mydd( $foo ) { dd $foo; "hello" }
&mydd
> mydd $x
1
helloNil是dd的返回值,确切地说是缺少它。
发布于 2020-05-21 00:33:44
它不是“dd的输出”,而是基于dd返回的值的REPL输出。
更详细的..。
(dd ...).
dd,所以它打印以换行符结尾的一行。。
按Enter后看到的第一行是由dd生成的输出。
您看到的第二行是由REPL生成的输出。
默认情况下,第二行的内容是dd返回的值的REPL的dd。The value dd returns (总是) Nil。这就是你所看到的。
(Liz已经添加了一个新的环境变量,因为这是发布的,它允许用户告诉Rakudo调用什么方法;.gist现在只是默认的。)
发布于 2020-05-21 10:36:42
Raku中的REPL检查执行的代码是否向STDOUT输出。这样做的前提是,如果您的代码输出了某些内容,您会对此感兴趣,而不是您刚刚执行的表达式的返回值。这就是为什么:
> say 42
42只显示42和,而不是,也显示say的返回值(碰巧是True )。它做的是而不是检查STDERR。用note检查一下
> note 42
42
Truenote与say相同,但它的输出放在STDERR而不是STDOUT上。dd也是如此。这就是为什么你也能在dd上得到这个
> dd 42
42
Nil但是,dd的实现返回Nil,因为它作为调试辅助工具,应该尽可能少地干扰它的环境。
https://stackoverflow.com/questions/61924054
复制相似问题