1. ホーム
  2. ruby

[解決済み] Rubyの括弧の意味は何ですか?

2023-06-10 05:40:15

質問

Rubyでは、以下の違いは何ですか? {}[] ?

{} は、コードブロックとハッシュの両方に使用されているようです。

[] は配列のみですか?

ドキュメントがあまり明確ではありません。

どのように解決するのですか?

コンテキストに依存します。

  1. 単体のとき、または変数に代入しているとき。 [] は配列を作成し {} はハッシュを生成します。

    a = [1,2,3] # an array
    b = {1 => 2} # a hash
    
    
  2. [] はカスタムメソッドとしてオーバーライドでき、一般にハッシュから何かを取り出すために使われます(標準ライブラリでは、ハッシュから取り出すために [] と同じハッシュ上のメソッドとして設定されています。 fetch )

    を使うのと同じように、クラスメソッドとして使うという慣例もあります。 static Create メソッドを使うのと同じように、クラスメソッドとして使われます。

    a = {1 => 2} # create a hash for example
    puts a[1] # same as a.fetch(1), will print 2
    
    Hash[1,2,3,4] # this is a custom class method which creates a new hash
    
    

    参照:Ruby ハッシュのドキュメント を参照してください。

  3. これはおそらく最も厄介なものです - 。 {} もブロックのための構文ですが、引数の括弧の外側のメソッドに渡されたときだけです。

    ペレンなしでメソッドを呼び出すと、Ruby はカンマをどこに置いたかを見て、引数がどこで終わるかを判断します (ペレンをタイプしていれば、そこにあったはずの場所)。

    1.upto(2) { puts 'hello' } # it's a block
    1.upto 2 { puts 'hello' } # syntax error, ruby can't figure out where the function args end
    1.upto 2, { puts 'hello' } # the comma means "argument", so ruby sees it as a hash - this won't work because puts 'hello' isn't a valid hash