ruby中的gets和gets.chomp是如何工作的?

时间:2014-04-21 08:37:22

标签: ruby

我了解到gets创建了一个新行并要求用户输入内容,而gets.chomp执行相同的操作,只是它不会创建新行。 gets必须返回一个对象,所以你可以调用一个方法,对吧?如果是,请将gets返回的对象命名为tmp,然后您可以调用chomp tmp方法。但在gets返回tmp之前,它应该在屏幕上打印一个新行。那么chomp做了什么?它是否在gets创建后删除了新行

重新解释我的问题的另一种方法是:当我致电gets.chomp时,是否执行了以下操作?

  1. gets打印一个新行
  2. gets返回tmp
  3. tmp.chomp删除新行
  4. 用户输入
  5. 这是正确的顺序吗?

6 个答案:

答案 0 :(得分:63)

gets允许用户输入一行并将其作为值返回给您的程序。该值包括尾随换行符。如果您随后在该值上调用chomp,则此换行符将被切断。所以不,你所拥有的是不正确的,它应该是:

  1. gets 获取一行文字,包括末尾的换行符。
    • 用户输入
  2. gets将该行文本作为字符串值返回。
  3. 在该值上调用chomp会删除换行符
  4. 您在屏幕上看到文本行的事实仅仅是因为您首先在那里输入了文本。 gets并不会神奇地抑制您输入内容的输出。

答案 1 :(得分:14)

如果这是正确的顺序,问题不应该是,但如果这是接近这个的正确方法,那就更多了。这是你做的。

看看这个,或多或少是你想要的"实现"。首先,为tmp指定一个名为gets的变量。然后在该对象上调用chomp,如Ruby文档中所述)方法,您可以看到chomp删除了新行。实际上chomp的作用是删除字符串末尾的 Enter 字符。当您输入h e l l o时,每次按下一个字符,然后按Enter获取所有字母 Enter。请记住,Enter只是另一个角色。

1. tmp = gets
hello
=>"hello\n"

2. tmp.chomp
"hello"

Gets 是您用户的输入。此外,了解 gets puts ,意味着get string *或 {{ 1}} 代表 put string 。这意味着这些方法仅处理 puts

答案 2 :(得分:2)

chomp 是删除尾随换行符的方法,即' \ n'从字符串。 每当"得到"用于从用户那里获取i / p它会附加新行字符,即' \ n'在字符串的末尾。所以删除' \ n'来自字符串' chomp '使用。

str = " Hello ruby​​ \ n"

str = str.chomp

put str

<强> O / P

&#34; Hello ruby​​&#34;

答案 3 :(得分:1)

  • “ gets”允许用户输入,但将在字符串之后添加新行(字符串表示文本或字符序列)

    “ gets.chomp”允许用户输入,就像“ gets”一样,但是有 不会是在字符串后添加的新行。

证明它们之间存在差异:

Gets.chomp

puts "Enter first text:"
text1 = gets.chomp
puts "Enter second text:"
text2 = gets.chomp
puts text1 + text2

获取:

puts "Enter first text:"
text1 = gets
puts "Enter second text:"
text2 = gets
puts text1 + text2

复制粘贴我给您的代码,运行,您将看到并知道它们都是不同的。

答案 4 :(得分:0)

举个例子 1。

x = gets
y = gets
puts x+y

2

 x = gets.chomp
 y = gets.chomp
 puts x+y

现在单独运行1和2并看到差异。谢谢你

答案 5 :(得分:0)

Ruby String API

chomp 返回一个新的String,其中给定的记录分隔符从str的末尾删除(如果存在)。