4
letters = ["a", "b", "c", "d", "e"]
first, *second = letters
first  # => "a"
second # => "["b", "c", "d", "e"]

これが何を生み出すかは理解していますが、これについて頭を悩ませることはできません。これは基本的にRubyマジックですか?splat 演算子を使用したこのタイプの代入をサポートするプログラミング言語は他に考えられません。

4

3 に答える 3

3

これは関数型言語ではよくあることなので、Ruby だけではありません。アイテムのリストがあり、それを と で分けて、headリストtailの最初の要素に対して操作を実行できるようにします。

これも機能します:

letters = ["a", "b", "c", "d", "e"]
first, *middle, last = letters

Clojure のような関数型言語では、次のようになります。

(first '(1 2 3)) => 1
(rest '(1 2 3)) => (2 3)
于 2013-10-31T11:32:06.127 に答える
2

これは非常に興味深いことであり、すべての「魔法の特性」が非常に詳細に説明されています。

例えば

a, *b, c = [1, 2, 3, 4, 5]
a # => 1
b # => [2, 3, 4]
c # => 5

a, (b, c) = [2,[2,[6,7]]]
a
=> 2
b
=> 2
c
=> [6, 7]
于 2013-10-31T11:33:12.693 に答える
2

基本的に配列を作成すると思います。次の例を見てください。

> *foo = 1
> foo
 => [1]

したがって、ここで*secondは配列を作成し、からすべての要素を抽出しますletters[1..-1]letters[1]それ以外の場合は"b"second変数に を割り当てるだけです。

誰かがより良い説明を思い付くと確信していますが、基本的な考え方はここにあります。

スプラット オペレーターの詳細については、 を参照してください。

于 2013-10-31T11:22:49.563 に答える