我是红宝石的新手。当我尝试读取没有换行符的行时,我学习了chomp方法。此方法用于从字符串末尾删除\ n。所以,我尝试了以下场景。
程序:
arr = Array.new;
while true
char = gets // Read line from input
if char == nil // If EOF reach then break
break
end
char.chomp // Try to remove \n at the end of string
arr << char // Append the line into array
end
p arr // print the array
输出:
$ ruby Array.rb
abc
def
["abc\n", "def\n"]
$
但它并没有删除字符串末尾的换行符。但如果&#39;!&#39;在chomp(char.chomp!)的末尾提供,它工作正常。所以 什么需要&#39;!&#39;以及为什么使用它?什么 !代表什么?
答案 0 :(得分:5)
作为good documentation says,chomp返回一个删除了换行符的新字符串,而chomp!修改字符串本身。
因此,char.chomp // Try to remove \n at the end of string
返回一个新字符串,但您没有将新字符串分配给任何变量。
以下是可能的解决方法:
char.chomp! // Try to remove \n at the end of string
arr << char // Append the line into array
或
str = char.chomp // Try to remove \n at the end of string
arr << str // Append the line into array
或
arr << char.chomp // Append the line into array
答案 1 :(得分:0)
当您执行此操作char.chomp
时,输出将不会有\n
个字符,但char
内的字符串将保持不变,在ruby中!
是一个使用的约定在改变对象本身的方法之后,这并不意味着只是向您的方法添加!
将改变该对象,但它只是方法定义中遵循的约定,因此如果您执行{{1} },它会改变char本身的值,这就是你看到正确结果的原因。你在这里做的只是char.chomp!
,这会将没有arr << char.chomp
的值添加到你的数组中,也不会改变实际的对象。
答案 2 :(得分:-1)
以!结尾的方法表明该方法将修改它所调用的对象。 Ruby称这些&#34;危险的方法&#34;因为他们改变了其他人可能引用的状态。
arr = Array.new;
while true
char = gets
if char == nil
break
end
char.chomp
puts char
// result = 'your string/n' (The object reference hasn't got changed.)
char2 = char.chomp
puts char2
// result = 'your string' (The variable changed but not the object reference)
char.chomp!
puts char
// result = 'your string' (The object reference chaned)
Now you can either do,
arr << char // Append the line into array
or,
arr << char2
end
p arr // print the array
他们都给你相同的结果。