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

时间:2011-06-21 21:58:44

标签: ruby newline language-design

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

为什么会这样?

4 个答案:

答案 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等等。在这种情况下,你呢?通过不咀嚼,看到(微小的,微小的)性能提升。