問題タブ [destructuring]

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 投票する
4 に答える
10584 参照

javascript - JavaScript での代入の構造化

JavaScript 1.7 の Mozilla の変更ログに見られるように、彼らは構造化代入を追加しました。悲しいことに、私は構文があまり好きではありません (なぜ a と b を 2 回書くのですか?):

このようなものはもっと良かったでしょう:

それはまだ下位互換性があります。Python のような構造化には後方互換性がありません。

とにかく、私が思いついた JavaScript 1.5 の最良の解決策は次のとおりです。

次のように機能します。

しかし、_ には意味がないので、これは本当に最悪です。名前を格納するのは単なる空のシェルです。しかし残念なことに、JavaScript にはポインターがないため、これが必要です。プラス面では、値が一致しない場合にデフォルト値を割り当てることができます。また、このソリューションは配列をスライスしようとしないことに注意してください。したがって、次のようなことはできません{first: 0, rest: 0}。しかし、その動作が必要な場合は、簡単に実行できます。

より良い解決策は何ですか?

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

macros - オプションのキーワード引数を&restのものとどのように組み合わせることができますか?

私は体を取るマクロを持っています:

ただし、オプションのキーワード引数も追加したいので、呼び出されると、次のいずれかのようになります。

どうやってやるの?私はClojure1.2を使用しているので、新しいオプションのキーワード引数を破壊するものも使用していることに注意してください。私は素朴にこれをやろうとしました:

しかし、明らかにそれはうまくいきませんでした。どうすればこれまたは同様のことを達成できますか?

0 投票する
4 に答える
1290 参照

syntax - Clojure での動的な let リストの破壊

letリストを動的に分解したいステートメントがあります。以下は私の解決策です:

の値の例symList("pt1" "pt2")、の値の例は次のvalListとおりです。(1 2)

ただし、これにより、最初の部分が「サポートされていないバインディング フォーム」であるという例外が生成されます。構文引用に関して何かが欠けているか、それが不可能であると思われます。アドバイスをいただければ幸いです。

編集:これらの値が実行時に来ることしか知らないため、このアプローチです。次に、レキシカル スコープを後で渡すことができるようにする必要があるため、let.

0 投票する
4 に答える
73521 参照

javascript - 文字列を直接変数に分割する

標準の JS が、最初の宣言中に文字列を一連の変数に直接分割する方法を提供しているかどうかを知りたいです。たとえば、Perl では次のように使用します。

Firefoxで私は書くことができます

しかし、この構文は ECMAScript 第 5 版には含まれていないため、他のすべてのブラウザーでは機能しません。私がやろうとしているのは、書く必要を避けることです:

現在私が書いているコードでは、このようなメソッドは本当に面倒なので、7 つの異なる分割から 20 個の変数を作成していますが、そのような冗長なメソッドを使用する必要はありません。

これを行うためのエレガントな方法を知っている人はいますか?

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

clojure - フォームとCompojureを破壊しますか?

何が起こっているのかを実際に理解せずに当て推量で動作するようになったので、これを投稿すると思いました。誰かが説明してくれれば役立つかもしれないと思いました。

Compojureハンドラーで:paramsマップの要素を取得する方法を理解しています。

また

私はその部分が何をしているのか完全には理解していませんが{some_arg "some_arg"}:(

:remote-addrまた、リクエストの一部にもアクセスしたかったのsome_argです。そして、私は

したがって、引用符で囲まれていない文字列some_argipは、値をバインドする変数の名前ですが、上のマップは有効なClojureマップではありません。それはどのように機能しますか?

また、これはRingリクエストマップ(defroutesマクロによって提供される)に対して評価されることもわかりますが、上記の式は関数またはマクロ定義ではないため、コードに有効な式として「存在する」にはどうすればよいですか?マクロ引数の通常のルールのある種の一時停止はありますか?私は、この非Lisp'erに理解できる破壊フォームの構文の定義を見つけることができませんでした。

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

clojure - 別のマップでマップを分解しますか?

次のデータ構造があります。

:resolutionキーをwidthシンボルheightに分解する関数を書きたいと思います。何かのようなもの

破壊でそのようなことは可能ですか?

ありがとう。

0 投票する
12 に答える
160573 参照

javascript - タプルからの JavaScript 変数の割り当て

Python 2 や Python 3 などの他の言語では、値を定義してタプル変数に割り当て、次のように値を取得できます。

JavaScript に似たようなものはありますか? それとも、配列を使って醜い方法で行う必要がありますか:

JavaScript 5 で Python タプルをシミュレートするより良い方法はありますか?

更新:新しいプロジェクトでは、CoffeeScript よりも優先する必要がある ES6 に関する回答を参照してください。

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

ruby - これは Method#to_proc のバグですか? (ルビー 1.8.7)

引数を 1 つ取る次のメソッドがあるとします。

空の配列で呼び出すことができます:

オブジェクトとして保存し、空の配列でMethod呼び出すこともできます。結果は同じです。

ただし、Methodオブジェクトをに変換し、それを空の配列でProc呼び出すと、次のようになります。ArgumentError

前の 2 つのケースと同じように動作することを期待していました。代わりに、私が書いたかのように動作しているようですfoo(*[])。ただし、空でない配列で呼び出すと、期待どおりに動作ます。

したがって、引数がたまたま空の配列である場合にのみ、引数を分解します。そして、私が電話した場合のみMethod#to_proc

Method方法や作業についての私の理解にギャップがありますかProc、それともバグですか?

Ruby 1.8.7-p299 を実行しています。1.8.6-p399 と 1.8.7-head で同じ動作が見られます。ただし、1.9.1-p378 には表示されません[]。空の配列で呼び出すと、3 つのフォームすべてが出力されます。

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

scala - Scala クロージャで Map.Entry を「分解」する

Map.Entry を分解するより良い方法はありますか? 次のことを試しましたが、コンパイルされません。

0 投票する
7 に答える
45714 参照

python - Assign multiple variables at once with dynamic variable names

I'm aware I can assign multiple variables to multiple values at once with:

And have foo = 1, bar = 2, and so on.

But how could I make the names of the variables more dynamic? Ie,

And have the same?