Ruby 打印和打印的区别是什么?
例如,在我写的这行代码中,Ruby 打印和打印的区别是什么?,ruby,Ruby,例如,在我写的这行代码中,print和put产生不同的结果 1.upto(1000).each { |i| print i if i % 2 == 0 } put在每个参数的末尾添加新行(如果没有) 打印不添加新行 例如: put[[1,2,3],[4,5,nil]将返回: 1 2 3 4 5 [[1,2,3], [4,5,nil]] 请注意,puts不会输出nil值,而print会输出nil值。print将每个参数(后跟$,)输出到$stdout,后跟$\)。它相当于args.join($
print
和put
产生不同的结果
1.upto(1000).each { |i| print i if i % 2 == 0 }
put
在每个参数的末尾添加新行(如果没有)
打印
不添加新行
例如:
put[[1,2,3],[4,5,nil]
将返回:
1
2
3
4
5
[[1,2,3], [4,5,nil]]
请注意,puts不会输出nil值,而print会输出nil值。
print
将每个参数(后跟$,
)输出到$stdout
,后跟$\
)。它相当于args.join($,)+$\
放置
将$、
和$\
设置为“\n”,然后执行与打印
相同的操作。关键的区别在于,每个参数都是一个带有put
的新行
您可以
要求使用“english”
访问这些全局变量。一个很大的区别是,如果您正在显示数组。
尤其是那些零的。
例如:
print [nil, 1, 2]
给予
但是
给予
注意,没有出现nil项(只是一个空行),每个项都在不同的行上。如果您想使用
put
输出字符串中的数组,您将得到与使用打印时相同的结果:
puts "#{[0, 1, nil]}":
[0, 1, nil]
但如果不使用带引号的字符串,则为“是”。唯一的区别是当我们使用put
时新行之间的区别给出一些好的提示:
print()→ 无
打印(obj,…)→ 无
将给定对象写入ios。返回nil
必须打开流进行写入。每个给定的对象都不是一个
字符串将通过调用其to_s
方法进行转换。什么时候
在没有参数的情况下调用,打印$的内容
如果输出字段分隔符($,
)不是nil
,则
在对象之间插入。如果输出记录分隔符
($\
)不是nil
,而是附加到输出中
put(obj,…)→ 无
将给定对象写入ios。在任何后面写一个换行符
不要已经以换行序列结束。返回nil
必须打开流进行写入。如果使用数组参数调用,
将每个元素写入新行。每个给定的对象都不是一个
字符串或数组将通过调用其to_s
方法进行转换。
如果在没有参数的情况下调用,则输出单个换行符
对上面给出的要点进行一点实验,差异似乎是:
- 使用多个参数调用,
print
通过“输出字段分隔符”$,
(默认为无)分隔它们,而put
通过换行分隔它们put
还会在最后一个参数后面加一个换行符,而print
不会
2.1.3:001>打印“你好”,“世界”
helloworld=>nil
2.1.3:002>放置“你好”、“世界”
你好
世界
=>零
2.1.3:003>$,='fanodd'
=>“范奇”
2.1.3:004>打印“你好”、“世界”
HellofOddWorld=>零
2.1.3:005>放置“你好”、“世界”
你好
世界
=>无
put
自动解压缩数组,而print
不会:
2.1.3 :001 > print [1, [2, 3]], [4]
[1, [2, 3]][4] => nil
2.1.3 :002 > puts [1, [2, 3]], [4]
1
2
3
4
=> nil
print
将输出记录分隔符$\
写入其打印的内容之后,而put
忽略此变量:
mark@lunchbox:~$irb
2.1.3:001>$\='moooooo!'
=>“呜呜!”
2.1.3:002>放入“Oink!Baa!Cluck!”
哎呀!咩!咯咯!
=>零
2.1.3:003>打印“Oink!Baa!Cluck!”
哎呀!咩!咯咯!呜呜!=>无
将
调用每个参数的
,如果字符串未以新行结尾,则向每个字符串添加新行。
print
只需将每个参数的调用到
即可输出
例如:
将“一个两个”放在一起
:
一两个
{新行}
放入“一对二”
:
一两个
{new line}#put不会向结果中添加新行,因为字符串以新行结尾
打印“一二”
:
一两个
打印“一二”
:
一两个
{新行}
还有另一种输出方式:p
对于每个对象,直接将obj.inspect写入程序的标准输出,后跟换行符
这有助于输出调试消息。
p“aa\n\t”
:aa\n\t
请参见每个参数后面的换行符。这是一个关键点,从Ruby文档中看不清楚(因为示例只有一个参数)。。。扩展array类并重写to_s方法。puts不会对新类的对象使用新的to_,而print使用irb 0.9.5 puts(“a”)和puts(“a\n”)在REPL上的输出完全相同。@kapv89不是这样的:我刚刚尝试过,两个puts e print都使用to_的方法。只有p不使用它。@Fronker,这仍然只是一个参数。编译器连接相邻的字符串。我今天注意到了这一点,这使我来到这里。我很想知道这方面的想法。这似乎是puts处理这样的数组的一个特例。不知道理由是什么。。。这仅仅是为了与其他语言类似吗?这很有意义,因为puts将以新行输出,因此您可以将其视为在数组上迭代并在每行上调用puts。。。然而,奇怪的是,由于两个原因,它没有输出nil
-1。首先,缺乏明确性:我不明白开头的“但是……”是什么意思,也不明白最后一段中的“是”是什么意思。其次,由于缺乏正确性:您说在示例代码中使用printf
而不是put
,将得到相同的结果,但实际上它是
1
2
puts "#{[0, 1, nil]}":
[0, 1, nil]
2.1.3 :001 > print [1, [2, 3]], [4]
[1, [2, 3]][4] => nil
2.1.3 :002 > puts [1, [2, 3]], [4]
1
2
3
4
=> nil