为什么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
。在这些情况下,你会看到一个(微小的,微小的)性能改进,而不是咀嚼。