一些我不理解的代码

时间:2014-05-31 03:05:47

标签: ruby

我不理解while true,以及name = gets(',').chomp(',')及其关系。对我来说,它似乎是一个无限循环。有人会解释这个吗?

 print "Enter your some more names separated by commas: "
 while true
   name = gets(',').chomp(',')
   puts "Hello #{name}"
 end

1 个答案:

答案 0 :(得分:1)

是一个无限循环。这个程序永远不会结束(除了它会在某些输入上崩溃)。打破它:

while true

这是一个while循环,其条件始终为true,因此它将永远循环到代码end之上。

name = gets(',')

请参阅documentation for gets。如果你直接运行这个程序,它将等待STDIN(控制台/终端)上的“输入”行。输入将被读取到记录分隔符,即“,”,结果将分配给变量name

.chomp(',')

chomp是一个method on String,它从字符串的末尾删除记录分隔符(在这种情况下,再次,',')。

puts "Hello #{name}"

这将打印字符串“Hello#{name}”,并将name变量的值插入到#{}占位符中。

end

这结束了while循环。

如果您运行此程序并输入“mary,angela,andy”并按Enter键,它将:

  1. 从STDIN读取“mary”,将chomp“,”放在最后,并将“mary”指定给name变量。
  2. 向STDOUT打印“Hello mary”。
  3. 循环回到顶部,阅读“angela”等等......
  4. 循环回到顶部,然后等待,因为STDIN上没有另一个记录分隔符。
  5. 如果您输入“foo”并按Enter键,它将:

    1. 从STDIN读取“andy \ nfoo”,chomp“结束”,等等......
    2. 将“Hello andy \ nfoo”打印到STDOUT
    3. 所以这是一个非常糟糕的程序,考虑到它表面上正在尝试做什么,但你有它。