在完成 Ruby Codecademy 练习时,我遇到了 puts() 和 print()。不同之处在于一个添加换行符而另一个不添加。这是经过深思熟虑的设计决策,还是只是不断发展的代码?对此有两个(名称完全不同的)函数对我来说似乎很奇怪。为什么不增加一个论点或其他解决方案呢?
编辑:澄清一下,我最感兴趣的是为什么选择这些特定名称,因为它们似乎与功能差异无关。
在完成 Ruby Codecademy 练习时,我遇到了 puts() 和 print()。不同之处在于一个添加换行符而另一个不添加。这是经过深思熟虑的设计决策,还是只是不断发展的代码?对此有两个(名称完全不同的)函数对我来说似乎很奇怪。为什么不增加一个论点或其他解决方案呢?
编辑:澄清一下,我最感兴趣的是为什么选择这些特定名称,因为它们似乎与功能差异无关。
我一直认为它来自 C,在那里你可以puts
打印带有新行的字符串,以及printf
按类型(但没有新行)打印带有插值的字符串。
同样,在 Ruby 中你有puts
which 做同样的事情,并print
使用 #{} 进行插值。与 C 的区别显然是插值直接内置在字符串中,并且可以在 print 语句中或之外使用。
我认为这是因为 Ruby 是面向 unix 的,它继承了一些奇怪的东西。特别是,由于终端是面向行的,即用户输入一行,然后程序以行响应,用户输入一行,......,它是如此频繁以至于你想在打印出一些东西时结束这一行,因此有puts
。但是,在某些情况下(不那么频繁)您不想结束一行,这就是为什么存在print
.
虽然我不觉得同时拥有print
和puts
不自然,但我确实觉得puts
被认为比 更基本的不自然print
,并且在 Ruby 的介绍性文档中,几乎总是puts
在开头介绍,但print
几乎没有解释。既然print
是比较初级的操作,而且puts
是建立在它之上的,而且速度较慢,所以教科书应该print
先介绍,然后再说那puts
是print "...#$/"
.
我认为这只是为了方便,因为用换行符打印一行是日常开发中相当常见的任务。
例如,在 Perl 语言中,他们在 1997 年用 Perl 5.10 显式引入了 say() 函数(相当于 ruby 的 puts),而 Perl 已经存在了很长时间。:-)