我了解到gets
创建了一个新行并要求用户输入内容,而gets.chomp
执行相同的操作,只是它不会创建新行。 gets
必须返回一个对象,所以你可以调用一个方法,对吧?如果是,请将gets
返回的对象命名为tmp
,然后您可以调用chomp
tmp
方法。但在gets
返回tmp
之前,它应该在屏幕上打印一个新行。那么chomp
做了什么?它是否在gets
创建后删除了新行
重新解释我的问题的另一种方法是:当我致电gets.chomp
时,是否执行了以下操作?
gets
打印一个新行gets
返回tmp
tmp.chomp
删除新行这是正确的顺序吗?
答案 0 :(得分:63)
gets
允许用户输入一行并将其作为值返回给您的程序。该值包括尾随换行符。如果您随后在该值上调用chomp
,则此换行符将被切断。所以不,你所拥有的是不正确的,它应该是:
gets
获取一行文字,包括末尾的换行符。
gets
将该行文本作为字符串值返回。chomp
会删除换行符您在屏幕上看到文本行的事实仅仅是因为您首先在那里输入了文本。 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)
chomp 返回一个新的String,其中给定的记录分隔符从str的末尾删除(如果存在)。