さて、私自身のメモのために、私はこれを詳しく調べて、ホルガー・ジャストの答えに基づいて、次のことを考え出しました:Rubyでの角括弧の使用は6つの用途に分けることができ、そのうちの3つは一部ですRuby のメソッド定義の 1 つと、そのうちの 3 つのセマンティック コンストラクト。
メソッド定義
クラス メソッド Array::[]、Hash::[] によるオブジェクトの作成
Array.[](1,2,3) #=> [1,2,3] #Un-sugared notation
Array["a","b","c"] #=> ["a","b","c"] #Sugared equivalent
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
同じことを行いますが、リテラル コンストラクターとは関係ありません。
インスタンスメソッドによる要素参照 Array#[]、Bignum#[]、Continuation#[]、Fixnum#[]、Hash#[]、MatchData#[]、Method#[]、Proc#[]、String#[]、 Struct#[]、Symbol#[]、Thread#[]、およびクラス メソッド Dir::[]、ENV::[]
ary = [1,2,"abc", [15,16,[26,27]]]
ary.[](2) #=> "abc" #Un-sugared notation
ary[2] #=> "abc" #Sugared equivalent
ary[0,2] #=> [1,2]
ary[3][2][1] #=> 26
[1,2,3][0] #=> 1
"Is a string"[7,3] #=> "rin"
インスタンス メソッド Array#[]=、Hash#[]=、String#[]=、Struct#[]=、Thread#[]=、およびクラス メソッド ENV::[]= による要素の割り当て
ary = [1,2,3]
ary.[]=(1,"abc") #=> [1,"abc",3] #un-sugared notation
ary[2] = "def" #=> [1,"abc","def"] #Sugared equivalent
hash = {"a"=>1, "b"=>2}
hash["a"] = 3 #=> {"a"=>3, "b"=>2}
セマンティック構造
配列リテラル コンストラクターによるオブジェクトの作成
ary = []
Ruby には、(通常は) 単純なシンボルのペアを使用して関連するクラスのオブジェクトを作成する一連のリテラル コンストラクターがあり、角括弧は配列オブジェクトのリテラル コンストラクターです: Array []
、 Hash {}
、 Proc ->(){}
、 Range ..
、...
、 Regexp //
、文字列""
と''
、記号:
と:""
。
% 表記によるオブジェクトの作成
%q[hello there you] #=> "hello there you" # String % notation
%w[hello there you] #=> ["hello", "there", "you"] # Array % notation
厳密には角括弧表記ではなく、必要に応じて角括弧を使用できる 2 記号対表記です。同様%q@hello there you@
に有効です。
Rubyの正規表現
/[^A-Fa-f0-9]/
角括弧は、Ruby 正規表現の文字クラスを示します。
Dir::glob メソッドで使用するパターンとして ,の別の使用法を見つけ[]
ましたが、正規表現とまったく同じように動作するはずです。それでも、Ruby の 1500 以上のメソッドには、さらに多くの用途が隠されている可能性があることを示しています。