2013-02-27 29 views
1

可能这是一个重复的问题,打印和放在Ruby中有什么区别?我可以用例子来回答吗?打印和放入Ruby的例子有什么区别?

+2

你为什么不自己试试? – oldergod 2013-02-27 23:56:54

+1

请阅读 - 从新手到专业开始红宝石,我拿你的例子为你 – 2013-02-27 23:59:26

+0

这绝对是一个重复:http://stackoverflow.com/questions/5018633/what-is-the-difference-between-print-and -puts?rq = 1 – nathanvda 2013-12-03 08:21:04

回答

1
irb(main):014:0> class Person 
irb(main):015:1> attr_accessor :name, :age, :gender 
irb(main):016:1> end 
=> nil 
irb(main):017:0> person = Person.new 
=> #<Person:0x2bf03e0> 
irb(main):018:0> person.name = "Robert" 
=> "Robert" 
irb(main):019:0> person.age = 52 
=> 52 
irb(main):020:0> person.gender = "male" 
=> "male" 

irb(main):021:0> puts person 
#<Person:0x2bf03e0> 
=> nil 
irb(main):022:0> print person 
#<Person:0x2bf03e0>=> nil 
irb(main):023:0> print person.name 
Robert=> nil 
irb(main):024:0> puts person.name 
Robert 
=> nil 

打印并提出之间的区别在于,自动将移动输出光标到下一行(即,它增加了一个新行字符,除非串已经以新行结束以开始一个新的线),而打印将继续将文本打印到与上一次相同的行上。

puts的前缀并不是要完成该方法的类或对象的名称,puts是从内核模块提供并且默认包含和搜索的方法,所以通常您不需要使用Kernel.puts来引用它。

Kernel.puts "Hello, world!" 

puts只接受一个参数,很少跟随其他方法或逻辑,所以括号不是必须的。

+2

'puts'会添加换行符以开始新行,除非字符串已经以换行符结束。 – steenslag 2013-02-28 00:02:38

+0

@steenslag - 你是对的,改变了答案,谢谢 – 2013-02-28 00:06:05

1

print不在最后添加换行符。puts的确如此。

大多数其他语言也有类似的结构。

Java有System.out.println()System.out.print()

C#有Console.WriteLine()Console.Write()

帕斯卡有Writeln()Write()

2

很简单。打印时,puts自动附加新行。 print无需修改即可打印字符串。

另一个区别在于底层写入操作的数量。 puts(大致)等价于:

STDOUT.write(str) 
STDOUT.write("\n") 

而且print(大致)等价于:

STDOUT.write(str) 

因此,在多线程环境,puts可以创造出一些怪异的东西,像这样:

Message1Messa 
ge2 
(blank line) 

虽然print带连接换行符的字符串产生:

Message1 
Message2 

除此之外,它们是相同的。

0

投入和印刷之间有两个主要的区别。

1。新线

puts参加一个换行符每个元素并打印(不指定新的行字符"\n"到底需要)

而打印在一个新的生产线,除非程序员不打印的每个元素明确指定它。

puts "Hello, Welcome to Ruby" 

输出:

Hello, Welcome to Ruby 
Dell-System-XPS:~/Documents/2016RoR/Ruby$ 



print "Hello, Welcome to Ruby"  

输出:

​​

你有没有注意到,有输出之后没有新的生产线。 然而,新行应为工作,当你明确提到像下面

print "Hello, Welcome to Ruby \n" 

输出换行字符:

Hello, Welcome to Ruby 
Dell-System-XPS:~/Documents/2016RoR/Ruby$ 

2.空字符或无价值观

print语句打印空或NIL值,但如果语句包含NIL val,则语句不打印它们你在里面。

> print [nil, 33,44,55] 
> [nil, 33, 44, 55] => nil 


> puts [nil, 33,44,55] 
> 33 
> 44 
> 55 
=> nil 

“你看到的不同,有印刷,而使用puts无NIL值”