2013-02-11 154 views
-1

我們可以有一個布爾函數,因此我們不需要使用'!' 假設我有一個布爾函數has_done_something?和 我想要做另一個動作,只有當用戶還沒有做那個動作 所以我可以做!has_done_something?或通過編寫函數has_not_done_something? 。 只是猜測軌道提供某種方式(或應提供此功能)?布爾方法的更好方法rails

回答

-1

不,目的不同。驚歎號意味着很多事情,它更危險。沒有什麼比它更好的了。這是爲了表明你在做什麼是不同的。

在Ruby中,您可以編寫名稱以!結尾的方法! (感嘆號或「爆炸」)。

在標準方法中,它通常用於指示一個方法,該方法會導致對象自身發生變異,但並非總是如此。

當我說mutate itself,這意味着對象本身得到改變,即使你沒有分配它本身。

一個很好的例子就是在Java中有StringStringBuffer/StringBuilder

StringBuffer/StringBuilder對象是可變的。

同樣的事情在這裏。

那麼什麼是foo.downcase!和foo.downcase

foo.downcase!將把對象foo本身修改爲無符號而不需要賦值給任何其他對象。

foo.downcase,除非它被分配給某個對象喜歡做這樣的事情不會修改對象:欄= foo.downcase在你的代碼

所以使用它的時候,你想做些什麼危險的,尤其是當存在兩個同名的方法,其中一個比另一個更「危險」。 「危險」可能意味着幾乎任何東西。

檢查bang-methods-or-danger-will-rubyist

+0

問題是關於!在前面倒置一個方法響應,而不是以!結尾的方法。 – sevenseacat 2013-02-12 08:19:18