私はRubyの基礎を学んでいます(ちょうど出発)、私はHash.[]
methodを見つけました。それは少し考えでRubyの構文砂糖には「ルール」がありますか?
a = ["foo", 1, "bar", 2]
=> ["foo", 1, "bar", 2]
Hash[*a]
=> {"foo"=>1, "bar"=>2}
で導入されました、私はHash[*a]
がHash.[](*a)
またはHash.[] *a
と等価であることを考え出しました。私の疑問がなぜそうなのでしょうか? *a
を角括弧の中に入れることができるのは何ですか、そしてどこで、いつ他の "それ"を使うことができるかというルールがありますか?
編集:私の言い回しは、混乱を招くようです。私は配列の拡張について尋ねていません。私はそれを得る。私の質問は基本的に:[]
がメソッド名の場合、大括弧の中に引数を入れても大丈夫ですか?あなたがメソッドFoo.dood
を持っていて、それに"hey"
という文字列を渡したければ、Foo.do"hey"od
と書くことができると言っているように思えます。
私はメソッド呼び出しで '* a'に焦点を当てたたくさんの答えを見ています。しかし、 '' [1、* a] 'が' '[1、a]'とは異なる結果をもたらすように、なぜ期待通りに動作するのか、 1] 'が無効です。 "splat"が代入にどのように関係しているのか、それがRubyの代入分解とどのようにやりとりできるかを見てうれしいでしょう。おそらく間違いなく別のSOの質問;-)準形式的なルビ仕様。準仕様へのリンクは、より良い答えになります。 –
@pst:良い質問。あなたがそれについて新しいSOの質問をする場合、私はそれに従うことができるようにここにリンクを投稿してください。 –
通常の方法では、ペアの配列を送信することです:Hash [[[key1、value1]、[key2、value2]] – tokland