Rubyで[角括弧]メソッドを定義するとどうなりますか?質問する

Rubyで[角括弧]メソッドを定義するとどうなりますか?質問する

私は通過していますRubyプログラミング - 実用的なプログラマーガイドそして、このコードを見つけました:

class SongList
  def [](key)
    if key.kind_of?(Integer)
      return @songs[key]
    else
      for i in [email protected]
        return @songs[i] if key == @songs[i].name
      end
    end
    return nil
  end
end

[ ] メソッドの定義がどのように機能するのか分かりません。

キーは [ ] の外側にあるのに、メソッドが呼び出されると [ ] の内側にあるのはなぜですか?

キーは括弧なしでも使えますか?

これを書くにはもっと良い方法があることはわかっていますし、うまく機能する独自の方法を書く方法も知っていますが、この[]メソッドは私を困惑させています...どんな助けでも大歓迎です、ありがとう

ベストアンサー1

これは単なる構文上の糖衣です。特定の構文パターンがメッセージ送信に変換されます。特に

a + b

と同じです

a.+(b)

==、、、、、、、、、、、、、、、、、、、、およびにも同様!=<こと>が当てはまります。​​​​​​​​​​<=>=<=>===&|*/-%**>><<!===~!~

また、

!a

と同じです

a.!

にも同じことが当てはまります~

それから、

+a

と同じです

a.+@

にも同じことが当てはまります-

プラス、

a.(b)

と同じです

a.call(b)

セッターには特別な構文もあります:

a.foo = b

と同じです

a.foo=(b)

最後に、インデックス作成用の特別な構文があります。

a[b]

と同じです

a.[](b)

そして

a[b] = c

と同じです

a.[]=(b, c)

おすすめ記事