相当于其他语言中ruby方法名称的感叹号

pan*_*chk 9 ruby naming-conventions

在Ruby中,带有副作用的方法或改变作为参数传递的对象的方法都有"!" 作为后缀.

例如:

"SomeString".gsub!(/S/, "s")
将更改String对象,同时
"SomeString".gsub(/S/, "s")
将处理String对象的副本,并且不会更改方法之外的任何对象的状态.

我喜欢这个约定,我也想在用其他语言编程时使用它.

我的问题:

  • 真正的Ruby程序员(我不是一个;-))真的使用这个约定吗?如果没有,为什么不呢?
  • 在Java,PHP,Perl,Cobol ......中是否有等效的命名方法约定?

  • Aug*_*aas 7

    Bang方法并不意味着"改变接收器".

    http://www.wobblini.net/bang.txt

    正如你所看到的,Matz的意思是"比没有感叹号的版本更危险".只是一个普通的FYI,看到目前为止大多数答案提到改变接收器.

    • Iraimbilanja:不是真的,有很多方法可以毫不费力地更改接收器(例如 Enumerable#delete_if)。关键是你不应该有一个 bang 方法,除非你有一个非 bang 等价物。仅更换接收器不足以证明一声巨响。 (2认同)