問題タブ [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.
tcl - TCL - 変数と upvar を返し、変更する
ベスト プラクティスについて、TCL の専門家からのアドバイスを希望します。
proc を使用して、特定のデータを含むリストを作成したいとします。今、最良の方法はどれですか?
このプラクティスのどれが推奨されますか?
編集: 申し訳ありませんが、この質問に回答した人々のコンセンサス (および説明) を理解できません。
tcl - Tcl で upvar を使用してプロシージャに変数を渡すことができない
呼び出し元の名前空間から変数にアクセス、読み取り、変更できるプロシージャが必要です。変数は と呼ばれ_current_selection
ます。いくつかの異なる方法を使用してそれを実行しようとしましupvar
たが、何も機能しませんでした。upvar
(メカニズムをテストするためだけに小さなテスト proc を作成しました)。これが私の試みです:
proc の呼び出し:
プロセス:
私の2回目の試みでは:
proc の呼び出し:
プロセス:
すべての試みで、コードのこの領域に到達すると、can't read "curr_sel": no such variable
私は何を間違っていますか?
編集:
関数の呼び出しは、bind
コマンドから行われます。
最初は関係ないと思っていました。しかし、多分そうです。
tcl - upvarコマンドはTCLでどのように機能しますか?
TCLのupvarコマンドについて質問があります。upvarコマンドを使用すると、他のプロシージャでグローバル変数またはローカル変数への参照があります。私は次のコードを見ました:
このプロシージャはと呼ばれtamp name1 name2
、その外部にグローバル変数name1、name2が定義されていません。この場合、このupvarはどのように機能しますか?
variables - エラー: "n" を読み取れません: Tcl にそのような変数はありません
上記のプロシージャで、' name
' は、' ' という名前のプロシージャに渡されるパラメータrep
です。このプログラムを実行すると、" error : Can't read "n" : no such variable
" が得られました。このエラーの考えられる原因を教えてください。
namespaces - TCL でのネームスペース/アップレベル/グローバルの使用
私はこのようなスクリプトを持っています:
subProc1 と subProc2 に、mainProc で定義された変数を持たせたいと考えています。それらを引数として渡すことはできますが、それは多くの引数であるため、避けたいと思います。
この行を subProcs に追加して、upvar コマンドを使用しようとしました。
しかし、「そのような変数はありません」というエラーメッセージが表示され、このような巨大な行があるのは良くありません
名前空間について読んだばかりですが、これを使用する方法がよくわかりません (さらに、概念を理解していないので、私のユースケースに本当に適応していますか?)
tcl - 名前を知らずに変数スコープを昇格させる
'd ファイルから変数を 'upvar' する必要がありsource
ます (そして、それらの名前がわかりません)
以下を含む TCL ファイルがあるとします。
今これ:
ファイル t.tcl は変更しないでください。
の内容についても知識がありませんt.tcl
。env
変数として渡されたとしましょう。v
トップレベルで可視化するにはどうすればよいですか?
namespaces - 名前でtkウィンドウを介して変数を更新するにはどうすればよいですか
次の状況を考慮してください。
(a) 呼び出しスコープから変数を取得する方法、(b) 3 つのすべての proc で使用できるようにする方法、および (c) 変更をその変数に書き戻す方法を理解しようとしています。
(a) 通常は 'upvar 1 $varName theVar' を使用して解決します (b) 通常は名前空間変数を使用して解決します (c) (a) で自動的に発生する proc が 1 つしかない限り、その変数のローカルエイリアスに取り組んでいます
問題は、upvar が (少なくとも意図したとおりに) (1) でのみ機能することです。(1) で upvar を使用し、名前空間変数に保存/コピーすると、(a) と (b) は解決できますが、(c) は解決しません。
ここで誰かが私を正しい方向に向けることができれば、私は感謝しています。
また、私は Tcl/Tk に比較的慣れていないため、私のコンセプトは理想的ではない可能性があります。より良い設計に向けた提案も歓迎します。
namespaces - TCL 名前空間とスタック フレームの違いは何ですか?
Upvar は、コール スタックと呼ばれることもある別のスタック フレーム、または 別のスコープ内の変数へのリンクを作成します。
Upvar は、グローバル (または名前空間) 変数のエイリアスを作成するためにも使用されます2。ただし、名前空間は、 namespace evalコマンドによってのみ作成されます。proc コマンドによって、新しいスタック フレームが作成されます。
ネームスペースとコール スタックは、TCL ネーミング コンテキストを変更できる 2 つの方法のようです。Upvar と Uplevel は、名前空間とコール スタックの両方で機能します。
私はそれを正しく理解しましたか?コール スタックと名前空間の直接的な比較はまだ見ていないので、質問します。