我想在Ruby Object
类中定义一个print方法不是很酷吗?请考虑以下事项:
class Object
def print
puts self.to_s
end
end
23.times &:print
有这样的事情有什么问题吗?似乎是一个很好的功能。它看起来也很容易阅读。
答案 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
所以你可以拥有此功能,如果您喜欢它,并且您不需要修改对象。