2

!強打は、メソッドがオブジェクトを変更する可能性があることを示していると言う人もいます。

この例では:

foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string

強打記号が副作用を引き起こしているようです。とobj.method!同等obj = obj.methodですか?そうでない場合、なぜですか?これら 2 つの式が等しくない方法はありますか?

4

1 に答える 1

6

バン!メソッド名の は、一般に「危険」を意味します。

  • これはメソッドの命名規則であり、演算子でも規則でもありません

  • これは通常、警告、突然変異、元に戻せない、例外の発生などを意味します。

「!」をよく使います。2 つの類似したメソッドを区別するための命名規則として:

  • 通常のメソッド名は結果を返します。

  • 「!」メソッド名は危険なことをしています。

「!」の例を作りました。突然変異の意味:

obj.change #=> return a new object that has the change.
obj.change! #=> do the change by mutating the object.

「!」の例を作りました。「エラーが発生する」という意味:

obj.save #=> if the object can't save, then return false.
obj.save! #=> if the object can't save, then raise an exception.

「!」の例を作りました。「危険」または「元に戻すことはできません」を意味します。

obj.exit #=> exit normally, running all exit handlers.
obj.exit! #=> exit immediately, skipping all exit handlers.

これらはすべて、開発者が 2 つの類似した名前のメソッドを提供することを選択した命名規則にすぎません。

于 2013-02-19T01:16:08.533 に答える