码迷,mamicode.com
首页 > 其他好文 > 详细

(补充1)Ruby中的p、puts、print对比

时间:2016-01-27 22:55:29      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

p puts Ruby 中特别常用的方法,很多童鞋可能认为它们是差不多的,使用的时候也不加注意,但是仔细考究起来,它们是有明显差别的。

先举一个例子:

class Foo
  def
inspect
    "foo from inspect"
  end


  def
to_s
    "foo from to_s"
  end
end
foo = Foo.new
p foo
puts foo
p "p: <#{foo}>"
puts "puts: <#{foo}>"

这段代码的输出是:

技术分享

p obj 相当于 puts obj.inspect

puts obj 相当于 puts obj.to_s

使用是明显区别的,p 是使用 obj inspect 方法,而 puts to_s 方法。

为什么会这样呢?这个我想可以从 to_s inspect 的区别说起,to_s 是对象的字符串表示, puts 和双引号字符使用的方法。inspect 是对象状态的表示,通用用于 debug 中。 Object 中的定义了 to_s inspect 方法,默认都是返回对象的类名和地址。

所以p puts主要是用途的不同,p 是作为 debug 输出,而 puts 作为对象的字符串表示输出。

另外值得一提的是,在 irb console 中,命令行中表达式求值,使用的是 p 对象的 inspect 方法。另外,通常 debug 输出命令,也是使用对象的 inspect 方法。

再举一个例子:

array =[2,4,6,8,10]
puts array
p array
print array
技术分享

小结:

比较项目

 puts

 print

 换行符

末尾添加换行符

 末尾不加换行符

 末尾添加换行符

 非字符串对象的输出

 调用该对象的to_s方法

 调用该对象的to_s方法

 通过inspect方法将对象转换成字符串

 

(补充1)Ruby中的p、puts、print对比

标签:

原文地址:http://www.cnblogs.com/blueColdFire/p/5164714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!