Rubyのメソッド
Ruby のメソッドは、他のプログラミング言語の関数に似ています。 1 つ以上の繰り返しステートメントを 1 つのユニットにバンドルするための Ruby メソッド。
メソッド名は小文字で始める必要があります。メソッド名を大文字で始めると、Ruby がそれを定数として扱い、呼び出しが正しく解析されない可能性があります。
メソッドは呼び出す前に定義する必要があります。そうしないと、Ruby は未定義のメソッド呼び出し例外を生成します。
構文
def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end
したがって、次のような単純なメソッドを定義できます:
def method_name expr.. end
次のようなパラメータを受け入れるメソッドを定義できます:
def method_name (var1, var2) expr.. end
メソッドが呼び出される場合、パラメータのデフォルト値を設定できます 必須パラメータは次のとおりです渡されず、デフォルト値が使用されます:
def method_name (var1=value1, var2=value2) expr.. end
メソッドを呼び出したいときは、次のようにメソッド名を使用するだけです:
method_name
ただし、パラメータを指定してメソッドを呼び出すときは、メソッド 名前を付けるときにパラメータを指定する必要もあります。例:
method_name 25, 30
パラメータ付きメソッドを使用する最大の欠点は、メソッドを呼び出すときにパラメータの数を覚えておく必要があることです。たとえば、3 つのパラメータを受け入れるメソッドに 2 つのパラメータだけを渡すと、Ruby はエラーを表示します。
Example
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test(a1="Ruby", a2="Perl") puts "编程语言为 #{a1}" puts "编程语言为 #{a2}" end test "C", "C++" test
上記の例の出力結果は次のとおりです:
编程语言为 C 编程语言为 C++ 编程语言为 Ruby 编程语言为 Perl
メソッドからの戻り値
Ruby のすべてのメソッドはデフォルトで値を返します。返される値は、最後のステートメントの値です。例:
def test i = 100 j = 10 k = 0 end
このメソッドを呼び出すと、最後に宣言された変数 k が返されます。
Ruby return ステートメント
Ruby の return ステートメントは、Ruby メソッドから 1 つ以上の値を返すために使用されます。
構文
return [expr[`,' expr...]]
2 つ以上の式が指定された場合、値を含む配列が戻り値になります。式が指定されていない場合、戻り値は nil になります。
例
return 或 return 12 或 return 1,2,3
次の例を見てください:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test i = 100 j = 200 k = 300 return i, j, k end var = test puts var
上記の例の出力結果は次のとおりです:
100 200 300
パラメータの可変数
これを呼び出すとき、2つのパラメータを持つメソッドを宣言するとします。メソッドでは、2 つのパラメーターも渡す必要があります。
ただし、Ruby では、可変数のパラメーターを使用してメソッドを宣言できます。次の例を見てみましょう:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def sample (*test) puts "参数个数为 #{test.length}" for i in 0...test.length puts "参数值为 #{test[i]}" end end sample "Zara", "6", "F" sample "Mac", "36", "M", "MCA"
このコードでは、パラメーター テストを受け入れるメソッド サンプルを宣言しました。ただし、このパラメータは可変パラメータです。これは、パラメーターがさまざまな数の変数を取ることができることを意味します。上記の例の出力結果は次のようになります。
参数个数为 3 参数值为 Zara 参数值为 6 参数值为 F 参数个数为 4 参数值为 Mac 参数值为 36 参数值为 M 参数值为 MCA
クラスメソッド
メソッドがクラスの外で定義されている場合、メソッドはデフォルトで private としてマークされます。一方、メソッドがクラスで定義されている場合、デフォルトで public としてマークされます。
メソッドのデフォルトの可視性とprivateフラグは、モジュールのpublicまたはprivateフラグを介して変更できます。
クラスのメソッドにアクセスしたい場合は、まずクラスをインスタンス化する必要があります。その後、そのオブジェクトを使用して、クラスの任意のメンバーにアクセスできます。
Ruby は、インスタンス化せずにメソッドにアクセスする方法を提供します。クラスメソッドを宣言してアクセスする方法を見てみましょう:
class Accounts def reading_charge end def Accounts.return_date end end
return_date メソッドがどのように宣言されるかはすでにわかっています。これは、クラス名の後にピリオドを付け、その後にメソッド名を続けることによって宣言されます。次のようにクラス メソッドに直接アクセスできます:
Accounts.return_date
このメソッドにアクセスするには、クラス Accounts のオブジェクトを作成する必要はありません。
Ruby alias ステートメント
このステートメントは、メソッドまたはグローバル変数にエイリアスを付けるために使用されます。エイリアスはメソッド本体内で定義できません。メソッドのエイリアスは、メソッドがオーバーライドされた場合でも、メソッドの現在の定義を維持します。
番号付きグローバル変数 ($1、$2、...) のエイリアスは禁止されています。組み込みグローバル変数をオーバーライドすると、重大な問題が発生する可能性があります。
構文
alias 方法名 方法名 alias 全局变量 全局变量
例
alias foo bar alias $MATCH $&
ここでは、bar のエイリアスを foo として、$& のエイリアスを $MATCH として定義しました。
Rubyのundefステートメント
このステートメントはメソッドの定義を解除するために使用されます。 undef をメソッド本体内に含めることはできません。
undefとaliasを使用することで、クラスのインターフェースを親クラスから独立して変更することができますが、クラス内でメソッドを呼び出すとプログラムが壊れる可能性があることに注意してください。
構文
undef 方法名
例
次の例では、barという名前のメソッドの定義を解除します。