【问题标题】:Modifying the default return value of an object belonging to an extended class修改属于扩展类的对象的默认返回值
【发布时间】:2011-10-22 21:06:04
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby arrays class


    【解决方案1】:

    添加这个:

      def to_s
        join '|'
      end
    

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

    【讨论】:

      【解决方案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}"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 2011-04-05
        • 1970-01-01
        • 2022-11-03
        • 2013-01-19
        • 2021-11-12
        • 1970-01-01
        相关资源
        最近更新 更多