2011-08-09 7 views
0

これは、レール構文に対して比較的新しいものです。私はそれ正常​​に動作拡張クラスに属するオブジェクトのデフォルトの戻り値を変更する

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

で次の操作を行いLogStringクラスに

class LogString < Array 

を持っています。私はここで、メソッドlog_string

class LogString < Array 
    def log_string 
     self.join(' | ') 
    end 
end 
ような構文何かを探しています|(「」)

を私はちょうどlogs.joinされるもの返すことだけ

logs 

を書くことができるようにしたいです

しかし、クラスインスタンス名を単に書くとlog_stringが自動的に呼び出される場所:logs

どうすればいいですか?

答えて

1

オブジェクトを参照してオブジェクト上のメソッドを呼び出すことはできませんが、かなり近づけることはできます。

あなたが(「文字列に」の略)to_sメソッドをオーバーライドする場合は、あなたのような何かを行うことができるでしょう...

class LogString < Array 
    def to_s 
    self.join ' | ' 
    end 
end 

log = LogString.new 
log << "message one" 
log << "message two" 

puts "#{log}" 
0

これを追加します。これは、テンプレートと#to_sが呼び出されたいくつかのI/Oオプスで動作します

def to_s 
    join '|' 
    end 

#inspectも変更しない限り、irbでは動作しません。 (新しい#to_sを呼び出すことができます)

関連する問題