時々、Rubyに、末尾に「?」と「!」があるメソッドがあります。例:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
私は彼らの目的が何であるかと思っていましたか?それらは単なる構文糖衣ですか?
読みやすくするために「ただの砂糖塗り」ですが、共通の意味があります。
!
_で終わるメソッドは、永続的または潜在的に危険な変更を実行します;例えば:Enumerable#sort
_はオブジェクトのソートされたバージョンを返し、_Enumerable#sort!
_はオブジェクトを所定の位置にソートします。ActiveRecord::Base#save
_はfalseを返し、_ActiveRecord::Base#save!
_は例外を発生させます。Kernel::exit
_はスクリプトを終了させますが、_Kernel::exit!
_はすぐに終了し、終了ハンドラーをバイパスします。?
_で終わるメソッドはブール値を返します。これにより、コードはより直感的に文のようになります— _if number.zero?
_は「if the number is zero」ですが、_if number.zero
_奇妙に見える。あなたの例では、_name.reverse
_は逆の文字列に評価されますが、_name.reverse!
_行がname
変数を実際に実行した後にのみcontain逆の名前。 _name.is_binary_data?
_は、「name
バイナリデータですか?」のように見えます。
疑問符は、メソッドがブール値を返すことを示します。すでにここで答えました:
感嘆符は、メソッドがオブジェクト自体に作用することを示します。すでにここで答えました:
In Ruby the ?
は、メソッドがブール値を返し、!
は、呼び出されたオブジェクトを変更します。これらは、コードを見たときに読みやすくするためにあります。
これとは対照的に、ほとんどのプログラミング言語は...
ルビー、メソッドは疑問符または感嘆符で終了できます。
慣例により、質問に答えるメソッド(受信者が空の場合、Array#empty?はtrueを返します)は疑問符で終わります。
潜在的に「危険な」メソッド(つまり、自己または引数を変更するメソッド、exit!など)は、慣例により感嘆符で終了します。
From: http://www.Ruby-lang.org/en/documentation/Ruby-from-other-languages/ 、セクション面白いメソッド名
注意してください、これは常にそうではありません。たとえば、Ruby Array#concat http://docs.Ruby-lang.org/en/2.0.0/Array.html#method-i-concat =。
ひどく焦げるのは、MyActiveRecordModel.column_names.concat([url])
のようなものです。後でMyActiveRecordModelに関連する呼び出しは、MyActiveRecordModelの「url」の列を検索してスローしようとします。
代わりに、連結を実行する前にクローンを作成する必要があります。幸いなことに、私のテストスイートはこれをキャッチしましたが、..