慣例により、感嘆符の付いたメソッドのみがオブジェクトを変更すると思いました。
> array = [1, 2, 3]
=> [1, 2, 3]
> array.pop
=> 3
> array
=> [1, 2]
Array
のpop
メソッドが呼び出されないのはなぜpop!
ですか?
慣例により、感嘆符の付いたメソッドのみがオブジェクトを変更すると思いました。
> array = [1, 2, 3]
=> [1, 2, 3]
> array.pop
=> 3
> array
=> [1, 2]
Array
のpop
メソッドが呼び出されないのはなぜpop!
ですか?
それは完全には正しくありません。
潜在的に「危険な」メソッド(つまり、selfまたは引数を変更するメソッド、exit!(exitのようにファイナライザーを実行しない)など)の名前は、その危険なバージョンの安全なバージョンが存在する場合、感嘆符で終わる必要があります。メソッド。
また、popメソッドの名前は、それが何をしているのかを正確に示しているため、感嘆符で署名する必要はありません。
「2番目の規則では、名前が感嘆符で終わるメソッドは注意して使用する必要があります。(...)多くの場合、感嘆符で終わるメソッドはミューテーターであり、オブジェクトの内部状態を変更します。ただし、これは常にそうであるとは限りません。感嘆符で終わらない多くのミューテーターと、感嘆符で終わる多くの非ミューテーターがあります。非ミューArray.fill
テイタバリアントを持たないミューテイタメソッド(など)には、通常、感嘆符(原文のまま)がありません。 「」
(Rubyプログラミング言語、Flanagan&Matsumoto、180ページ)
この本は、例と(両方とも非変異、すべてのexit
at_exitフックをスキップ)を続けています。exit!
exit!
この規則は引き続き有効ですが、スタックから何かを効果的に削除しているpop
場合は、すべてのスタック実装でよく知られている方法です。pop
これはデータ構造の一般的な知識であり、ルビーの連中はそれに!
記号を追加するのを見逃していました。