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

ste*_*lag 18 ruby newline language-design

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

为什么会这样?

J-_*_*_-L 7

喜欢puts(听起来很相似),它被设计为使用\n角色来处理线条.

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

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


小智 5

var = gets.chomp 
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案根本没有解决这个问题.我想知道为什么它如此受欢迎. (3认同)

Cod*_*rer 0

从性能的角度来看,更好的问题是“为什么我应该摆脱它?”。这并不是一个很大的成本,但在幕后你必须支付费用来咀嚼返回的字符串。虽然你可能从来没有遇到过需要它的情况,但你肯定遇到过很多你不关心的情况——gets s; puts stuff() if s =~ /y/i等等。在这些情况下,你会看到(微小的)性能改进,而不是咀嚼。

  • 我不认为是这样。Ruby 并不是被设计为一种快速语言,如果每个人都必须去咀嚼字符串,那么就没有任何好处。 (3认同)