修改属于扩展类的对象的默认返回值

我对rails语法比较陌生。 我有一个LogString类

class LogString < Array 

我用它做了以下几点

 logs = LogString.new logs.push 'this happened' logs.push 'that happened' 

哪个工作正常。 我希望能够只写

 logs 

返回什么是logs.join(’|’)

所以我在这里寻找类似log_string方法的语法

 class LogString < Array def log_string self.join( ' | ' ) end end 

但是当我简单地编写类实例名称时会自动调用log_string:logs

我怎样才能做到这一点?

你不能只引用一个对象并让它在对象上调用一个方法,但你可以非常接近。

如果你重写to_s方法(“to string”的缩写),你将能够做类似……

 class LogString < Array def to_s self.join ' | ' end end log = LogString.new log << "message one" log << "message two" puts "#{log}" 

添加这个:

  def to_s join '|' end 

这将在模板和一些调用#to_s的I / O操作中起作用。 除非你也修改#inspect否则它不能用于irb。 (你可以让它调用你的新#to_s。)