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