首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Rakudo返回输入和分配标量的Nil?

为什么Rakudo返回输入和分配标量的Nil?
EN

Stack Overflow用户
提问于 2020-05-20 22:33:29
回答 3查看 128关注 0票数 11

下面是使用Rakudo的REPL会话。

代码语言:javascript
复制
> my Int $x = 1
1
> dd $x
Int $x = 1
Nil

为什么在Nil输出的第二行上有一个dd

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-20 22:38:21

代码语言:javascript
复制
> sub mydd( $foo ) { dd $foo; "hello" }
&mydd
> mydd $x
1
hello

Nil是dd的返回值,确切地说是缺少它。

票数 9
EN

Stack Overflow用户

发布于 2020-05-21 00:33:44

它不是“dd的输出”,而是基于dd返回的值的REPL输出。

更详细的..。

(dd ...).

  • The
  • R in REPL读取您输入的行 E计算该行。它是dd,所以它打印以换行符结尾的一行。
  • P打印另一行,也以换行符结尾。如果前一步中的计算结果没有在STDOUT上产生输出,则此步骤生成的行包含由evaluation.
  • (The L返回的值,然后循环等待下一行输入)

按Enter后看到的第一行是由dd生成的输出。

您看到的第二行是由REPL生成的输出。

默认情况下,第二行的内容是dd返回的值的REPL的ddThe value dd returns (总是) Nil。这就是你所看到的。

(Liz已经添加了一个新的环境变量,因为这是发布的,它允许用户告诉Rakudo调用什么方法;.gist现在只是默认的。)

票数 7
EN

Stack Overflow用户

发布于 2020-05-21 10:36:42

Raku中的REPL检查执行的代码是否向STDOUT输出。这样做的前提是,如果您的代码输出了某些内容,您会对此感兴趣,而不是您刚刚执行的表达式的返回值。这就是为什么:

代码语言:javascript
复制
> say 42
42

只显示42,而不是,也显示say的返回值(碰巧是True )。它做的是而不是检查STDERR。用note检查一下

代码语言:javascript
复制
> note 42
42
True

notesay相同,但它的输出放在STDERR而不是STDOUT上。dd也是如此。这就是为什么你也能在dd上得到这个

代码语言:javascript
复制
> dd 42
42
Nil

但是,dd的实现返回Nil,因为它作为调试辅助工具,应该尽可能少地干扰它的环境。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61924054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档