为什么Ruby的“获取”包括结束换行?

我从来不需要得到的结尾换行符。 有一半的时间我忘记了它,这是一个痛苦….

为什么会这样?

puts (听起来很相似),它被设计为使用\n字符来处理行。

gets接受一个可选参数,用于“拆分”输入(或“只读到它到达)。它默认为特殊的全局变量$/ ,默认包含\n

gets是一个非常通用的读数流方法,包括这个分隔符。 如果它不这样做,流内容的一部分将丢失。

 var = gets.chomp 

这一切都为您提供了一条线。

如果查看IO#gets的文档,您会注意到该方法采用可选参数sep ,默认为$/ (输入记录分隔符)。 您可以决定将输入拆分为除换行之外的其他内容,例如段落(“零长度分隔符一次读取输入一个段落(输入单独段落中的两个连续换行符)”):

 >> gets('') dsfasdf fasfds dsafadsf #=> "dsfasdf\nfasfds\n\n" 

从绩效的角度来看,更好的问题是“我为什么要摆脱它?”。 这不是一个很大的成本,但你需要付出代价来扼杀返回的字符串。 虽然你可能永远不会遇到需要的情况,但你肯定有很多你不关心的案例 – gets s; puts stuff() if s =~ /y/i gets s; puts stuff() if s =~ /y/i等, gets s; puts stuff() if s =~ /y/i 。在这些情况下,你会看到一个(微小的,微小的)性能改进,而不是咀嚼。