我永远不需要从gets
得到的结尾换行符。有一半的时间我忘记了chomp
它,这是......的痛苦。
为什么会这样?
答案 0 :(得分:7)
与puts
(听起来相似)类似,它设计为使用\n
字符处理行。
gets
接受一个可选参数,用于“拆分”输入(或“只读到它到达)。它默认为特殊的全局变量$/
,其中包含{{1默认情况下。
\n
是读数流的一种非常通用的方法,包括这个分隔符。如果它不这样做,流内容的一部分将丢失。
答案 1 :(得分:6)
var = gets.chomp
这样就可以为你提供一条线。
答案 2 :(得分:2)
如果查看IO#gets
的文档,您会注意到该方法采用可选参数sep
,默认为$/
(输入记录分隔符)。您可以决定将输入拆分为除换行符之外的其他内容,例如段落(“零长度分隔符一次读取一个段落的输入(输入单独段落中的两个连续换行符)”):( / p>
>> gets('')
dsfasdf
fasfds
dsafadsf #=> "dsfasdf\nfasfds\n\n"
答案 3 :(得分:0)
从表现的角度来看,更好的问题是“我为什么要摆脱它?”。这不是一个大成本,但在引擎盖下你必须付钱才能选择要返回的字符串。虽然你可能永远不会遇到需要它的情况,但你肯定有很多你不关心的案例 - gets s; puts stuff() if s =~ /y/i
等等。在这种情况下,你呢?通过不咀嚼,看到(微小的,微小的)性能提升。