-1

我们可以有一个布尔函数,这样我们就不需要使用'!' 假设我有一个布尔函数 has_done_something?并且我只想在用户没有执行该操作的情况下执行另一个操作,所以我可以通过 !has_done_something? 或者通过编写函数 has_not_done_something?. 只是猜测 Rails 是否提供某种方式(或应该提供此功能)?

4

1 回答 1

-1

不,目的不同。感叹号意味着很多东西,它以危险而闻名。没有什么比它更好的选择了。这是为了表明你正在做的事情是不同的。

在 Ruby 中,您可以编写名称以 ! 结尾的方法。(感叹号或“砰”的一声)。

在标准方法中,它通常用于表示导致对象自身发生变异的方法,但并非总是如此。

当我说mutate itself时,这意味着即使您没有在其内部分配它,对象本身也会发生变化。

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

StringBuffer/StringBuilder对象是可变的。

同样的事情也发生在这里。

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

foo.downcase!会将对象本身修改为小写,而foo无需分配给任何其他对象。

foo.downcase不会修改对象,除非它被分配给某个对象,例如:bar = foo.downcase

所以在你的代码中当你想做一些危险的事情时使用它,特别是当存在两个同名的方法并且其中一个比另一个更“危险”时。“危险”几乎可以意味着任何东西。

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

于 2013-02-11T09:46:08.627 回答