メソッド名は、大文字と小文字、数字を含んでいてもよい、_
を強調し、赤点斑は!
、?
、=
に署名します。
メソッド名は数字で始めることはできません。!
,?
および=
の文字は末尾にのみ表示できます。
メソッド名に非ASCII文字を使用できますが、これは非常に混乱する可能性があり、一般的ではありません。
大文字で始まる名前はRubyの定数であるため、メソッド名を小文字で開始するのは必須ではありませんが、これは必須です。これは、メソッドの定数名を使用することは可能ですが、interpeterは定数としての名前のためのアップになりますので、あなたは、括弧なしでそれを呼び出すことができなくなります。
def Capital
nil
end
Capital # NameError: uninitialized constant Capital
Capital() # => nil
いくつかの非常に広範囲に及びメソッド名を定義するときに、一貫規則を使用しています。
メソッド名の名前に単語の区切り(例えばMath::sqrt
、Array#each_index
、...)として_
アンダースコアで、フルダウンケースです。
述語は、最後の文字(例えばArray#empty?
、Hash#has_key?
、...)として疑問符?
を持っています。述語は通常ブール値を返しますが、これは必ずしもそうではありません。これらのメソッドは、述語が偽と評価された場合はnil
またはfalse
を返すだけです(そうでない場合はFile::size?
を返します)。ファイルが存在しない場合はnil
、それ以外の場合はInteger
)。
呼び出されるオブジェクトの状態を変更するか、異常な動作をするメソッドは、最後の文字として感嘆符!
を持ちます。このメソッドは、通常と呼ばれ、他のメソッド(たとえばArray#sort!
、Array#slice!
、...)の破壊的またはインプレースバージョンであるため、と呼ばれます。
セッターは、最後の文字(例えばArray#[]=
、...)として等号=
を有します。 Rubyのinterpeterは、setterメソッドのinvokationため糖衣構文を提供しています:
a = [4, 5, 6]
a[0] = 3 # Shorthand for a.[]=(0, 3)
Rubyは、メソッド名として演算子記号を使用して演算子を定義することができます:
╔═══════════════════════════╦═════════════════════════════════════════════╦═══════╗
║ Operators (by precedence) ║ Operations ║ Arity ║
╠═══════════════════════════╬═════════════════════════════════════════════╬═══════╣
║ ! ~ + ║ Boolean NOT, bitwise complement, unary plus ║ 1 ║
║ ║ (define with method name [email protected], Ruby 1.9+) ║ ║
║ ║ ║ ║
║ ** ║ Exponentiation ║ 2 ║
║ ║ ║ ║
║ - ║ Unary minus (define with method name [email protected]) ║ 1 ║
║ ║ ║ ║
║ */% ║ Multiplication, division, modulo ║ 2 ║
║ ║ ║ ║
║ + - ║ Addition, subtraction ║ 2 ║
║ ║ ║ ║
║ << >> ║ Bitwise shift ║ 2 ║
║ ║ ║ ║
║ & ║ Bitwise AND ║ 2 ║
║ ║ ║ ║
║ |^ ║ Bitwise OR, Bitwise XOR ║ 2 ║
║ ║ ║ ║
║ < <= => > ║ Ordering ║ 2 ║
║ ║ ║ ║
║ == === != =~ !~ <=> ║ Equality, pattern matching, comparison ║ 2 ║
╚═══════════════════════════╩═════════════════════════════════════════════╩═══════╝
単項演算子メソッドがあります引数を渡さなかった。バイナリ演算子メソッドは引数を渡され、それを操作してself
に作用します。
厳密には演算子のアライメントを守ることが重要です。異なるアリティ(例えば2つの引数をとる+
メソッド)を持つ演算子メソッドを定義することは可能ですが、Rubyでは演算子構文でメソッドを呼び出すことはできません(ただし、ドット構文では機能します)。
オペレータの元の意味をできるだけ忠実に守っておくことをお勧めします。オペレータの元の意味を知っているユーザにとっては、ユーザ定義のクラスでどのように動作するかを直感的に理解する必要があります。
言語は、通常、配列とハッシュ値にアクセスするために使用される特別な演算子以外のと[]
メソッドの構文砂糖を提供します。 []
メソッドは任意のアリティで定義できます。
順序、等価、比較、パターンマッチングを除いて、テーブル内のすべてのバイナリ演算子について、Rubyでは短縮割り当ての略語も提供します(x += y
はx = x + y
に展開されます)。それらをメソッドとして定義することはできませんが、それらの基になっている演算子を定義する動作を変更することができます。
通常のメソッド名内では使用できません(do&print
またはstart-up
は有効なメソッド名ではありません)。他の人が組み込みの構文については、真実であると言う何
ちょっと注意してください:偽( 'nil'や' false')やtruethy(その他すべて)の値を返すのは、 'true'と' false'ではなく、述語のメソッド( '? '戻り値は 'true'と' false'のように動作する 'if'文で使用されることを意図していますが、実際の戻り値は意図したメソッドインタフェースの一部ではない場合があります。 –
アドバイスをいただき、ありがとうございました。 –
メソッド名全体としてしか使用できないいくつかの文字もあります。つまり、+ + ** ** /(これらの演算子をオーバーロードしている場合)foo + barというメソッドは定義できません。 –