我们能不能有一个布尔函数,这样我们就不需要使用'!'假设我有一个布尔函数has_done_something?和只有当用户还没有执行另一个操作时,我才想执行该操作这样我就可以做到了!有什么事吗?或者通过编写函数has_not_done_something。只是猜测rails是否提供了某种方式(或者应该提供此功能)?
不,目的不同。感叹号意味着很多东西,它更为人所知的是危险。没有什么比这更好的选择了。这表明你正在做的事情不同。
在Ruby中,您可以编写名称以结尾的方法!(感叹号或"砰"的一声)。
在标准方法中,它通常用于指示导致对象自身发生变异的方法,但并不总是如此。
当我说mutate itself
时,这意味着对象本身会发生更改,即使您没有在其内部分配它。
一个很好的例子是,在Java中有String
和StringBuffer/StringBuilder
。
StringBuffer/StringBuilder
对象是可变的。
这里也一样。
那么什么是foo.downcase!和foo.downcase
CCD_ 5将修改对象foo
本身以降频,而不需要分配给任何其他对象。
foo.downcase
不会修改对象,除非它被分配给某个对象,比如做一些事情:bar=foo.downcase
因此,在你的代码中,当你想做一些危险的事情时,尤其是当存在两个同名的方法,其中一个比另一个更"危险"时,请使用它。"危险"几乎可以指任何东西。
检查爆炸方法或危险会影响