別の tcl ファイルまたは同じファイルを使用して、myFile.tcl 内のすべてのプロシージャ (proc) を一覧表示する方法はありますか。
1718 次
4 に答える
1
最も安価な方法は、ファイルを開いて を使用regexp
して名前を選択することです。完全に正確というわけではありませんが、かなり適切に機能します。
set f [open "sourcefile.tcl"]
set data [read $f]
close $f
foreach {dummy procName} [regexp -all -inline -line {^[\s:]*proc (\S+)} $data] {
puts "Found procedure $procName"
}
すべてのケースに対応していますか?いいえ。有用なサブセットを扱いますか? はい。サブセットは十分な大きさですか? かなり可能性があります。
于 2013-10-18T23:18:30.273 に答える
1
問題のファイルをソースする前と後に使用[info procs]
し、結果を比較して、どのプロシージャが追加されたかを判断できます。例えば:
proc diff {before after} {
set result [list]
foreach name $before {
set procs($name) 1
}
foreach name $after {
if { ![info exists procs($name)] } {
lappend result $name
}
}
return [lsort $result]
}
set __before [info procs]
source myFile.tcl
set __after [info procs]
puts "Added procs: [diff $__before $__after]"
このソリューションで私が気に入っていることの 1 つは、このdiff
プロシージャーが実際には単なる一般的な集合差分ユーティリティであることです。これは、定義済みプロシージャーのリストの比較に固有のものではありません。
于 2013-10-18T17:27:45.263 に答える