我想縮短,如下面的代碼:如何實現Object.try!在Ruby on Rails中?
content = content.join("\n") if content.respond_to? :join
到這一點:
content.try!(:join, "\n")
這是一個好主意,它可以在現有Object.try
方面來實現?
我想縮短,如下面的代碼:如何實現Object.try!在Ruby on Rails中?
content = content.join("\n") if content.respond_to? :join
到這一點:
content.try!(:join, "\n")
這是一個好主意,它可以在現有Object.try
方面來實現?
如果我理解正確的話,你想有一個版本的try
修飾就地的對象,如x = x.reverse
和x.reverse!
之間的差異要回答你的問題......
這是一個好主意
不,這不是,它實際上是不可能的。
它可以用現有的
Object.try
來實現嗎?
不,無論有沒有Object.try
,都根本無法實現。你不能就地改變對象的類型。使用.join
在數組上產生一個字符串。您不能將數組就地更改爲字符串。這就是爲什麼首先沒有join!
方法的原因。 Array和Enumerable上的許多方法的版本有和沒有!
。許多其他方法沒有!
版本。這是因爲!
版本無法實現。
一般來說,如果你有一個像reverse
的方法,它是就地相當於reverse!
你已經可以使用try
就好:
content.try(:reverse!)
如果!
方法已經不存在,如join
和不存在的join!
,這是因爲它不能工作,並且不能使它與假設的try!
一起工作。
注意,你可以做的東西像與代理對象這項工作,但是這是一個可怕的過度緊張的解決方案,不存在問題。
只需使用content = content.join("\n") if content
並完成它。
如果你想拋出一個異常時,它失敗了,怎麼樣'content.join「\ n」'?... –
您還沒有解釋什麼'試試!'呢。我們應該如何告訴你這是個好主意還是如何實施? – meagar
@BradWerth我不認爲意圖是拋出一個異常... – meagar