2011-08-09 81 views
0

我對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自動調用時,我只寫類實例名稱:日誌

我該怎麼做?

回答

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

補充一點:

def to_s 
    join '|' 
    end 

這將在模板和地方#to_s被稱爲一些I/O操作的工作。它不會在irb中工作,除非您也修改#inspect。 (你可以讓它叫你的新#to_s。)