布尔方法rails的更好方法

时间:2013-02-11 09:20:06

标签: ruby-on-rails-3

我们可以有一个布尔函数,这样我们就不需要使用'!' 假设我有一个布尔函数has_done_something?和 我想仅在用户没有完成该操作时才执行其他操作 所以我可以做到!has_done_something?或者通过编写函数has_not_done_something? 。 只是猜测rails是否提供某种方式(或者应该提供此功能)?

1 个答案:

答案 0 :(得分:-1)

不,目的不同。感叹号意味着许多事情,并且更为人所知的是危险。没有什么比它更像。这是为了表明你在做什么是不同的。

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

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

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

这方面的一个很好的例子是,在Java中有StringStringBuffer/StringBuilder

StringBuffer/StringBuilder个对象是可变的。

同样的事情在这里。

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

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

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

因此,在您的代码中,当您想要做一些危险的事情时使用它,特别是当存在两个具有相同名称的方法时,其中一个比另一个更“危险”。 “危险”几乎可以意味着什么。

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