Variable cannot be used in print, but seems to keep reference, what happens.

huangapple go评论79阅读模式
英文:

re.pl: Variable cannot be used in print, but seems to keep reference, what happens

问题

使用 re.pl 来自 Devel::REPL:

  1. eddie@MYPC0:~$ re.pl
  2. $ $a++
  3. 0
  4. $ $a++
  5. 1
  6. $ $a++
  7. 2
  8. $ $a++
  9. 3
  10. $ $a++
  11. 4
  12. $ $a++
  13. 5
  14. $ $a++
  15. 6
  16. $ print $a
  17. 1
  18. $ $a++
  19. 7

print $a 打印出 1,无论我是否初始化变量。看起来它不能打印出 a,它打印出另一种类型的引用,我也不明白如果它失去了引用,为什么打印的值是 1 而不是 0

另一个测试:

  1. eddie@MYPC0:~$ re.pl
  2. $ $a =1
  3. 1
  4. $ print $a
  5. 1
  6. $ $a++
  7. 1
  8. $ print $a
  9. 1
  10. $ $a++
  11. 2
  12. $ $a++
  13. 3
  14. $ print $a
  15. 1
  16. $ $a++
  17. 4
  18. $ print $a
  19. 1
  20. $ $a++
  21. 5
  22. $ $a
  23. 6
  24. $ print $a
  25. 1

还有另一个:

  1. eddie@MYPC0:~$ re.pl
  2. $ my $a=0
  3. 0
  4. $ print $a
  5. 1
  6. $
  7. $ $a
  8. 0
  9. $
英文:

Using re.pl from Devel::REPL:

  1. eddie@MYPC0:~$ re.pl
  2. $ $a++
  3. 0
  4. $ $a++
  5. 1
  6. $ $a++
  7. 2
  8. $ $a++
  9. 3
  10. $ $a++
  11. 4
  12. $ $a++
  13. 5
  14. $ $a++
  15. 6
  16. $ print $a
  17. 1
  18. $ $a++
  19. 7

print $a prints 1 whether I initialize the variable or not. It seems it cannot print $a and it prints another sort of reference, also I don't understand if it loses the reference why is the value printed 1 instead of 0

Another test:

  1. eddie@MYPC0:~$ re.pl
  2. $ $a =1
  3. 1
  4. $ print $a
  5. 1
  6. $ $a++
  7. 1
  8. $ print $a
  9. 1
  10. $ $a++
  11. 2
  12. $ $a++
  13. 3
  14. $ print $a
  15. 1
  16. $ $a++
  17. 4
  18. $ print $a
  19. 1
  20. $ $a++
  21. 5
  22. $ $a
  23. 6
  24. $ print $a
  25. 1

And yet another

  1. eddie@MYPC0:~$ re.pl
  2. $ my $a=0
  3. 0
  4. $ print $a
  5. 1
  6. $
  7. $ $a
  8. 0
  9. $

答案1

得分: 5

re.pl正在显示*print的返回值*。如果成功打印了内容,print内建函数会“返回true”(即1)。

  1. andrew@goron:~$ re.pl
  2. $ $a = 42;
  3. 42
  4. $ print $a;
  5. 1
  6. $ print 0;
  7. 1
  8. $ print "banana";
  9. 1

你看不到print本身的任何输出,原因是Devel::REPL会缓冲输出直到获得换行符:

  1. andrew@goron:~$ re.pl
  2. $ print "Hello";
  3. 1
  4. $ print ", World!\n";
  5. Hello, World!
  6. 1
英文:

re.pl is showing you the return value of print. The print builtin "returns true" (i.e. 1) if it was able to successfully print something.

  1. andrew@goron:~$ re.pl
  2. $ $a = 42;
  3. 42
  4. $ print $a;
  5. 1
  6. $ print 0;
  7. 1
  8. $ print "banana";
  9. 1

The reason you don't see any output from print itself is because Devel::REPL buffers output until it gets a newline:

  1. andrew@goron:~$ re.pl
  2. $ print "Hello";
  3. 1
  4. $ print ", World!\n";
  5. Hello, World!
  6. 1

huangapple
  • 本文由 发表于 2023年3月20日 22:40:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/75791687.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定