an! 是啥意思?跟随Ruby方法的名称表示? [复制]

Posted

技术标签:

【中文标题】an! 是啥意思?跟随Ruby方法的名称表示? [复制]【英文标题】:What does an ! following the name of a Ruby method signify? [duplicate]an! 是什么意思?跟随Ruby方法的名称表示? [复制] 【发布时间】:2011-12-12 19:48:33 【问题描述】:

可能重复:Why are exclamation marks used in Ruby methods?

在查看一些 Ruby 代码时,我遇到了这种方法:

def SomeMethod!
    // ...
end

是什么!下面的方法名呢?

【问题讨论】:

【参考方案1】:

按照惯例,这意味着该方法会改变类的状态。

【讨论】:

不,这不是约定的意思。【参考方案2】:

我认为将方法标记为“比其他方法更危险”只是一种惯例。这可能意味着它具有影响其参数或类属性的副作用。这只是提醒要小心。

【讨论】:

是的。而已。比非爆炸方法“更危险”或“更令人惊讶”。【参考方案3】:

方法名称末尾的感叹号表示该方法以比没有! 的相同方法的版本更危险的方式执行操作。

请注意,如果没有其他方法,则永远不要使用!。您可以将! 理解为一种在视觉上区分两种其他等效方法的方法。

例子:

Array#flatten

Array#flatten!

Kernel#exit!

Kernel#exit

【讨论】:

+1 正确地提到了 bang 方法只有在存在相应的非 bang 方法时才应该存在的事实。 -1 提到突变:这不仅仅是只是关于突变,它基本上是关于“更令人惊讶”,其中包括但不限于突变。 @JörgWMittag: 'surprising' 有点含糊:) 你能给我举个核磁共振的例子,! 被用来表示原始数据突变以外的东西吗? Kernel#exit!Process::exit!

以上是关于an! 是啥意思?跟随Ruby方法的名称表示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 中的 *(星号)是啥意思? [复制]

∑是啥符号的求和符号?

*nix 是啥意思?

Ruby 中的“猴子补丁”到底是啥意思?

Ruby 中的语法 [*a..b] 是啥意思?

Timeexpressions是啥意思