問題タブ [upvar]

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

tcl - TCL - 変数と upvar を返し、変更する

ベスト プラクティスについて、TCL の専門家からのアドバイスを希望します。

proc を使用して、特定のデータを含むリストを作成したいとします。今、最良の方法はどれですか?

このプラクティスのどれが推奨されますか?

編集: 申し訳ありませんが、この質問に回答した人々のコンセンサス (および説明) を理解できません。

0 投票する
3 に答える
435 参照

tcl - Tcl で upvar を使用してプロシージャに変数を渡すことができない

呼び出し元の名前空間から変数にアクセス、読み取り、変更できるプロシージャが必要です。変数は と呼ばれ_current_selectionます。いくつかの異なる方法を使用してそれを実行しようとしましupvarたが、何も機能しませんでした。upvar(メカニズムをテストするためだけに小さなテスト proc を作成しました)。これが私の試みです:


proc の呼び出し:

プロセス:


私の2回目の試みでは:

proc の呼び出し:

プロセス:


すべての試みで、コードのこの領域に到達すると、can't read "curr_sel": no such variable

私は何を間違っていますか?

編集:

関数の呼び出しは、bindコマンドから行われます。

最初は関係ないと思っていました。しかし、多分そうです。

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

tcl - upvarコマンドはTCLでどのように機能しますか?

TCLのupvarコマンドについて質問があります。upvarコマンドを使用すると、他のプロシージャでグローバル変数またはローカル変数への参照があります。私は次のコードを見ました:

このプロシージャはと呼ばれtamp name1 name2、その外部にグローバル変数name1、name2が定義されていません。この場合、このupvarはどのように機能しますか?

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

variables - エラー: "n" を読み取れません: Tcl にそのような変数はありません

上記のプロシージャで、' name' は、' ' という名前のプロシージャに渡されるパラメータrepです。このプログラムを実行すると、" error : Can't read "n" : no such variable" が得られました。このエラーの考えられる原因を教えてください。

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

namespaces - TCL でのネームスペース/アップレベル/グローバルの使用

私はこのようなスクリプトを持っています:

subProc1 と subProc2 に、mainProc で定義された変数を持たせたいと考えています。それらを引数として渡すことはできますが、それは多くの引数であるため、避けたいと思います。

この行を subProcs に追加して、upvar コマンドを使用しようとしました。

しかし、「そのような変数はありません」というエラーメッセージが表示され、このような巨大な行があるのは良くありません

名前空間について読んだばかりですが、これを使用する方法がよくわかりません (さらに、概念を理解していないので、私のユースケースに本当に適応していますか?)

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

tcl - 名前を知らずに変数スコープを昇格させる

'd ファイルから変数を 'upvar' する必要がありsourceます (そして、それらの名前がわかりません)

以下を含む TCL ファイルがあるとします。

今これ:

ファイル t.tcl は変更しないでください。

の内容についても知識がありませんt.tclenv変数として渡されたとしましょう。vトップレベルで可視化するにはどうすればよいですか?

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

namespaces - 名前でtkウィンドウを介して変数を更新するにはどうすればよいですか

次の状況を考慮してください。

(a) 呼び出しスコープから変数を取得する方法、(b) 3 つのすべての proc で使用できるようにする方法、および (c) 変更をその変数に書き戻す方法を理解しようとしています。

(a) 通常は 'upvar 1 $varName theVar' を使用して解決します (b) 通常は名前空間変数を使用して解決します (c) (a) で自動的に発生する proc が 1 つしかない限り、その変数のローカルエイリアスに取り組んでいます

問題は、upv​​ar が (少なくとも意図したとおりに) (1) でのみ機能することです。(1) で upvar を使用し、名前空間変数に保存/コピーすると、(a) と (b) は解決できますが、(c) は解決しません。

ここで誰かが私を正しい方向に向けることができれば、私は感謝しています。

また、私は Tcl/Tk に比較的慣れていないため、私のコンセプトは理想的ではない可能性があります。より良い設計に向けた提案も歓迎します。

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

namespaces - TCL 名前空間とスタック フレームの違いは何ですか?

Upvar は、コール スタックと呼ばれることもある別のスタック フレーム、または 別のスコープ内の変数へのリンクを作成します。

Upvar は、グローバル (または名前空間) 変数のエイリアスを作成するためにも使用されます2ただし、名前空間は、 namespace evalコマンドによってのみ作成されます。proc コマンドによって、新しいスタック フレームが作成されます。

ネームスペースとコール スタックは、TCL ネーミング コンテキストを変更できる 2 つの方法のようです。Upvar と Uplevel は、名前空間とコール スタックの両方で機能します。

私はそれを正しく理解しましたか?コール スタックと名前空間の直接的な比較はまだ見ていないので、質問します。