Rubyスーパーキーワードの使い方
スーパーキーワードはRubyで何をしますか?
super
を呼び出すメソッドと同じ名前の親クラスのメソッドを呼び出します 。
例 :
i_like_chocolate
という名前のメソッドを呼び出す場合 、次にsuper
を呼び出します そのメソッド内で、Rubyは、このメソッドを所有している人の親クラスで同じ名前の別のメソッドを見つけようとします。
これにより、通常のメソッド呼び出しのようにクラスの祖先チェーン全体で泡立ち続けます。 。
メソッドが存在しない場合は、NoMethodError
がトリガーされます 例外、およびmethod_missing
の場合 それを使用することがわかりました。
今 :
いくつかのコード例を見てみましょう!
引数なしのスーパー
次の例では、Cat
があります。 Animal
から継承するクラス 。
Cat
クラスにはname
があります super
を使用するメソッド 親クラスで同じメソッドを呼び出すには(Animal
。
コードは次のとおりです:
class Animal def name puts "Animal" end end class Cat < Animal def name super end end cat = Cat.new cat.name # "Animal"
Rubyのスーパーキーワードは、引数の有無にかかわらず使用すると動作が異なります 。
引数なし:
元のメソッド呼び出しに使用された引数を新しいメソッドに渡します 、キーワード引数と指定されている場合はブロックを含みます。
ここに例があります :
def puts(*) super end puts 1, 2, 3
このメソッドは、クラスの外部で定義され、Object
に属します。 。これは、元のputs
の前に呼び出されることを意味します メソッド。
今:
puts
を呼び出すとき super
を使用する私たちが作成したこの新しいメソッドを呼び出しています 元のputs
を呼び出す 。
SuperとSuper()を使用する場合
super
の使い方を見てきました 親メソッドを呼び出すため。
しかし、親メソッドが同じ数の引数をとらない場合はどうなりますか?
その場合、次を使用できます:
-
super()
引数なし -
super(arg1, arg2, ...)
渡す引数を選択する
例 :
def puts super() end
ここで括弧が特別な意味を持っていることに注意してください 、通常のメソッド呼び出しとは異なります。
super
について知っておくべきことがいくつかあります :
- メソッド内でのみ使用できます
- 親メソッドを呼び出した結果を返します
- 複数回呼び出すことができます
太線(super
結果を返す)は、super
の使用法のいくつかを理解するための鍵です 野生で見つけるかもしれません。
super
を使用できます デコレータパターンを実装する場合、またはinitialize
内で呼び出す場合 メソッドは、親クラスのインスタンス変数を初期化するために使用できます。
概要
Rubyスーパーキーワードについて学習しました 、それが何であるか、そしてそれがさまざまな状況でどのように機能するか!
この記事を楽しんだ場合は、RubyGuidesニュースレターを購読して、このようなコンテンツや、購読者だけが利用できるその他の便利なRubyのヒントを入手することをお勧めします。
-
Ruby Grepメソッドの使用方法(例付き)
grepについて話しましょう メソッド。 この方法で何ができますか? Grepを使用して、配列や範囲などの列挙可能なオブジェクトをフィルタリングできます。 「しかし、selectはすでにそれを行っています!」 はい。ただし、grepの動作は異なり、結果も異なります。 いくつかの例を見てみましょう。 RubyGrepメソッドの例 この配列が与えられた場合: objects = [a, b, c, 1, 2, 3, nil] grepを使用して文字列のみを取得できます : objects.grep(String) # [a, b, c] 整数のみ: objects.g
-
Ruby Mapメソッドの使用方法(例付き)
Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.