我们可以有一个布尔函数,这样我们就不需要使用'!' 假设我有一个布尔函数has_done_something?和 我想仅在用户没有完成该操作时才执行其他操作 所以我可以做到!has_done_something?或者通过编写函数has_not_done_something? 。 只是猜测rails是否提供某种方式(或者应该提供此功能)?
答案 0 :(得分:-1)
不,目的不同。感叹号意味着许多事情,并且更为人所知的是危险。没有什么比它更像。这是为了表明你在做什么是不同的。
在Ruby中,您可以编写名称结尾的方法! (感叹号或“爆炸”)。
在标准方法中,它通常用于表示导致对象自身变异的方法,但并非总是如此。
当我说mutate itself
时,这意味着即使您没有在其内部分配对象本身也会发生变化。
这方面的一个很好的例子是,在Java中有String
和StringBuffer/StringBuilder
。
StringBuffer/StringBuilder
个对象是可变的。
同样的事情在这里。
那么什么是 foo.downcase!和foo.downcase
foo.downcase!
会将对象foo
本身修改为downcase,而无需分配给任何其他对象。
foo.downcase
不会修改对象,除非将其分配给某个对象,例如: bar = foo.downcase
因此,在您的代码中,当您想要做一些危险的事情时使用它,特别是当存在两个具有相同名称的方法时,其中一个比另一个更“危险”。 “危险”几乎可以意味着什么。