为什么不遵循Array#keep_if的Ruby约定?

Sha*_*med 7 ruby

使用bang(!)有一个方法命名的Ruby约定.惯例是如果方法改变self,我们用bang让别人知道自我修改的行为.

例如Array#select,不会改变self,但Array#select!确实如此.但Array#keep_if确实会改变自我.什么都没有Array#keep_if!.

不遵守惯例的原因是什么?

spi*_*ann 5

Ruby的创建者Matz写道:

爆炸(!)既不表示“破坏性”,也不表示“非破坏性”。爆炸标志的意思是“爆炸版本比非爆炸版本更危险;请小心处理”。由于Ruby有很多“破坏性”方法,因此如果您遵循爆炸标志,则每个Ruby程序都会充满爆炸,因此很难看。

资料来源:Ruby论坛