2013-02-11 205 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