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

时间:2011-08-09 02:31:39

标签: ruby-on-rails ruby arrays class

我对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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

如果您覆盖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}"

答案 1 :(得分:0)

添加:

  def to_s
    join '|'
  end

这将在模板和一些调用#to_s的I / O操作中起作用。除非您同时修改#inspect,否则它不会在irb中有效。 (你可以让它调用你的新#to_s。)