Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby输出是不同的。为什么?_Ruby - Fatal编程技术网

Ruby输出是不同的。为什么?

Ruby输出是不同的。为什么?,ruby,Ruby,我正在学习ruby,我做了足够的研究,但无法理解下面的内容。为什么这两种输出如此不同 irb(main):007:0> puts "It's a #{"bad " * 5}world!" It's a bad bad bad bad bad world! => nil irb(main):008:0> puts "It's a #{5.times do print "bad " end}world!" bad bad bad bad bad It's a 5world! =

我正在学习ruby,我做了足够的研究,但无法理解下面的内容。为什么这两种输出如此不同

irb(main):007:0> puts "It's a #{"bad " * 5}world!"
It's a bad bad bad bad bad world!
=> nil


irb(main):008:0> puts "It's a #{5.times do print "bad " end}world!"
bad bad bad bad bad It's a 5world!
=> nil

谢谢

bad*5将坏字符串重复5次,然后返回新的坏字符串,它将成为其。。。字符串,然后整个字符串得到输出。另一个输出5次,不向父字符串返回任何内容,然后得到输出。e、 两个版本的代码执行路径根本不同。谢谢Mark,我理解了第一个版本。为什么在第二次输出中,5.0倍的打印坏端首先打印?是因为“5”是一个对象吗?当您将{}中的所有内容插入到字符串中时,Ruby首先执行该操作并将结果放入字符串中。这就是为什么您会看到它在返回字符串之前打印出来。Fixnumtimes的返回值是数字本身,这就是为什么在字符串中看到5的原因。这是因为打印表达式具有打印到屏幕的副作用。例如,尝试a=print5与a=5;打印a。在第一种情况下,print是一个表达式,它将5打印到screen并计算为nil,然后将nil存储到a中。在第二种情况下,a是5。这解释了我的许多其他输出。谢谢