2

別の tcl ファイルまたは同じファイルを使用して、myFile.tcl 内のすべてのプロシージャ (proc) を一覧表示する方法はありますか。

4

4 に答える 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 に答える