2011-11-14 67 views
0

我有一個例如類結果,我想加入的結果名稱,而不是用「」象下面這樣的結果:可能在Ruby中擴展Array的方法?

@results=[result1, result2...] 
results.join(", ") do |r| 
    r.name 
end 

results.join方法應該是陣列的extensino方法,我想提供給我的程序中所有的數組。

可能嗎?

+1

'#join'已經是*數組方法了......你究竟在問什麼? –

+1

爲什麼它應該適用於所有數組,如果它只適用於響應「名稱」的對象數組?此外,您可以收集或映射並獲得相同的效果,而不會污染具有消息特定功能的通用類。是的,這是可能的。 –

+0

是的,連接已經是一個數組的方法,我想要的是可以阻塞的連接。像def加入(delim){array.map {| x | yield(x)} .join(delim)} – aaron

回答

2

是的,這是可能的。

class Array 
    def join_names 
    collect(&:name).join(", ") 
    end 
end 

但是,這使得您的代碼更有可能與其他庫中的方法向Array類添加方法時發生命名空間衝突。

+0

謝謝。我想要的應該是這樣,這意味着我想覆蓋/重載? Array的現有連接函數,可能和任何問題? class Array def join(delim) if block_given? self.map {| item | yield(item)} .join(delim) else self.join(delim) end end end – aaron

+1

覆蓋內置函數並不是一個好主意。擴展數組並定義一個新方法,如'join_names',就像在這裏的答案一樣。 – tkrajcar

+0

好的,非常感謝! – aaron