問題タブ [double-splat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2445 参照

ruby - メソッド呼び出しで Ruby のダブル スプラット (`**`) を使用するポイントは何ですか?

単一のスプラットで、配列を複数の引数に展開できます。これは、配列を直接渡すのとはかなり異なります。

ただし、キーワード引数を使用すると、ハッシュの構文糖衣にすぎないため、違いはわかりません。

見事な対称性とは別に、メソッド呼び出しでダブル スプラットを使用する実用的な理由はありますか? (これは、メソッド定義でそれらを使用することとは異なることに注意してください)

0 投票する
2 に答える
843 参照

ruby - ダブル スプラット演算子がハッシュを破壊的に変更する – これは Ruby のバグですか?

**Ruby 2.1.1 の (ダブル スプラット) 演算子の非常に驚くべき動作に気付きました。

の前にキーと値のペアが使用されている**hash場合、ハッシュは変更されません。ただし、キーと値のペアが の後にのみ使用される**hash場合、ハッシュは永続的に変更されます。

比較のために、*配列に対する単一演算子の動作を考えてみましょう。

配列は全体を通して変更されません。


の破壊的な動作**は意図的なものだと思いますか、それともバグのように見えますか?

どちらの場合でも、**オペレーターがどのように機能するかを説明しているドキュメントはどこにありますか?


Ruby Forumでもこの質問をしました。

アップデート

このバグは Ruby 2.1.3+ で修正されています。

0 投票する
2 に答える
287 参照

ruby - `nil` のダブル スプラット

私の理解では、非配列オブジェクトの単一のスプラットがto_a要素を呼び出して分離します。はnil.to_aと定義されているため[]、次の変換が行われます。

類推すると、非ハッシュ オブジェクトのダブル スプラットが呼び出さto_hれ、キーと値のペアが分離されると考えました。はnil.to_hであると定義されているため{}、次の変換が行われると予想していました。

しかし実際には、エラーが発生します: no implicit conversion of nil into Hash. なぜそのように振る舞うのですか?

編集私はデザインの背後にある理由について尋ねていません. ダブルスプラに関して私の考えが間違っているところを尋ねています。

0 投票する
2 に答える
120 参照

arguments - 2 レベル スプラッター TCL

TCL にプロシージャまたはコマンドがあり、引数の数が可変である場合、リストの要素が入力として使用される場合、次のように「スプラッタ」演算子を使用できます。

しかし、「2回スプラッタ」したい場合はどうすればよいですか?つまり、2 レベルを平坦化しますか? 順番に 2 回使用しても機能しません。

余分な文字でエラーになります。