問題タブ [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.
javascript - JavaScript での代入の構造化
JavaScript 1.7 の Mozilla の変更ログに見られるように、彼らは構造化代入を追加しました。悲しいことに、私は構文があまり好きではありません (なぜ a と b を 2 回書くのですか?):
このようなものはもっと良かったでしょう:
それはまだ下位互換性があります。Python のような構造化には後方互換性がありません。
とにかく、私が思いついた JavaScript 1.5 の最良の解決策は次のとおりです。
次のように機能します。
しかし、_ には意味がないので、これは本当に最悪です。名前を格納するのは単なる空のシェルです。しかし残念なことに、JavaScript にはポインターがないため、これが必要です。プラス面では、値が一致しない場合にデフォルト値を割り当てることができます。また、このソリューションは配列をスライスしようとしないことに注意してください。したがって、次のようなことはできません{first: 0, rest: 0}
。しかし、その動作が必要な場合は、簡単に実行できます。
より良い解決策は何ですか?
macros - オプションのキーワード引数を&restのものとどのように組み合わせることができますか?
私は体を取るマクロを持っています:
ただし、オプションのキーワード引数も追加したいので、呼び出されると、次のいずれかのようになります。
どうやってやるの?私はClojure1.2を使用しているので、新しいオプションのキーワード引数を破壊するものも使用していることに注意してください。私は素朴にこれをやろうとしました:
しかし、明らかにそれはうまくいきませんでした。どうすればこれまたは同様のことを達成できますか?
syntax - Clojure での動的な let リストの破壊
let
リストを動的に分解したいステートメントがあります。以下は私の解決策です:
の値の例symList
と("pt1" "pt2")
、の値の例は次のvalList
とおりです。(1 2)
ただし、これにより、最初の部分が「サポートされていないバインディング フォーム」であるという例外が生成されます。構文引用に関して何かが欠けているか、それが不可能であると思われます。アドバイスをいただければ幸いです。
編集:これらの値が実行時に来ることしか知らないため、このアプローチです。次に、レキシカル スコープを後で渡すことができるようにする必要があるため、let
.
javascript - 文字列を直接変数に分割する
標準の JS が、最初の宣言中に文字列を一連の変数に直接分割する方法を提供しているかどうかを知りたいです。たとえば、Perl では次のように使用します。
Firefoxで私は書くことができます
しかし、この構文は ECMAScript 第 5 版には含まれていないため、他のすべてのブラウザーでは機能しません。私がやろうとしているのは、書く必要を避けることです:
現在私が書いているコードでは、このようなメソッドは本当に面倒なので、7 つの異なる分割から 20 個の変数を作成していますが、そのような冗長なメソッドを使用する必要はありません。
これを行うためのエレガントな方法を知っている人はいますか?
clojure - フォームとCompojureを破壊しますか?
何が起こっているのかを実際に理解せずに当て推量で動作するようになったので、これを投稿すると思いました。誰かが説明してくれれば役立つかもしれないと思いました。
Compojureハンドラーで:paramsマップの要素を取得する方法を理解しています。
また
私はその部分が何をしているのか完全には理解していませんが{some_arg "some_arg"}
:(
:remote-addr
また、リクエストの一部にもアクセスしたかったのsome_arg
です。そして、私は
したがって、引用符で囲まれていない文字列some_arg
とip
は、値をバインドする変数の名前ですが、上のマップは有効なClojureマップではありません。それはどのように機能しますか?
また、これはRingリクエストマップ(defroutes
マクロによって提供される)に対して評価されることもわかりますが、上記の式は関数またはマクロ定義ではないため、コードに有効な式として「存在する」にはどうすればよいですか?マクロ引数の通常のルールのある種の一時停止はありますか?私は、この非Lisp'erに理解できる破壊フォームの構文の定義を見つけることができませんでした。
clojure - 別のマップでマップを分解しますか?
次のデータ構造があります。
:resolution
キーをwidth
シンボルheight
に分解する関数を書きたいと思います。何かのようなもの
破壊でそのようなことは可能ですか?
ありがとう。
javascript - タプルからの JavaScript 変数の割り当て
Python 2 や Python 3 などの他の言語では、値を定義してタプル変数に割り当て、次のように値を取得できます。
JavaScript に似たようなものはありますか? それとも、配列を使って醜い方法で行う必要がありますか:
JavaScript 5 で Python タプルをシミュレートするより良い方法はありますか?
更新:新しいプロジェクトでは、CoffeeScript よりも優先する必要がある ES6 に関する回答を参照してください。
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 つのフォームすべてが出力されます。
scala - Scala クロージャで Map.Entry を「分解」する
Map.Entry を分解するより良い方法はありますか? 次のことを試しましたが、コンパイルされません。
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?