如果对象可以在Ruby中打印出来怎么办? [对象#打印]

时间:2014-12-12 09:11:17

标签: ruby

我想在Ruby Object类中定义一个print方法不是很酷吗?请考虑以下事项:

class Object
  def print
    puts self.to_s
  end
end

23.times &:print

有这样的事情有什么问题吗?似乎是一个很好的功能。它看起来也很容易阅读。

3 个答案:

答案 0 :(得分:3)

已定义Object#inspect。另外,Object类中已经将Kernel#print定义为私有方法,并且每个类都继承自它。


答案 1 :(得分:1)

此方法已存在于Ruby标准库中。但是,它有一个不同的名称:display

23.times &:display

# 012345678910111213141516171819202122

如您所见,它不会在对象的字符串表示后写入换行符;它不适合物体检查。

答案 2 :(得分:0)

Object添加方法的主要问题是它们变得通用,并且可能与其他库或项目中类似命名的方法冲突。

在Ruby核心中已经存在多种简单的输出数据或转换为字符串形式的方法,因此即使在您自己的代码中,冲突(在非常有用的方法名称上)的风险也可能超过更好的语法带来的任何好处。

如果您在自己的项目中有一组较小的类,您认为这将是一个有用的功能,那么这是混合的理想用例。

定义一个模块:

module CanPrintSelf
  def print
    puts self.to_s
  end
end

并将其包含在您希望拥有该功能的任何课程中:

class MyClass
  include CanPrintSelf
end

my_object = MyClass.new

my_object.print

所以可以拥有此功能,如果您喜欢它,并且您不需要修改对象。