Search 提供文本搜索命令及其参数的简明方法?(Tcl/Tk)

Search 提供文本搜索命令及其参数的简明方法?(Tcl/Tk),search,tcl,tk,text-widget,Search,Tcl,Tk,Text Widget,我正在用Tcl/Tk编写的程序中实现“Find”功能,我正在努力找到一种简洁高效的方法来编写这段代码。搜索将有不同的选项,如“查找全部”、“精确”和“向上/向下搜索”等 以下是我已经尝试过的和我想要的: set idx [.text index insert]; set search_for $::search_entry; set parameters ""; if {$::match_exact == 1} {append parameters "-exact "}; if {$::cas

我正在用Tcl/Tk编写的程序中实现“Find”功能,我正在努力找到一种简洁高效的方法来编写这段代码。搜索将有不同的选项,如“查找全部”、“精确”和“向上/向下搜索”等

以下是我已经尝试过的和我想要的:

set idx [.text index insert];
set search_for $::search_entry;

set parameters "";
if {$::match_exact == 1} {append parameters "-exact "};
if {$::case_sensitive == 0} {append parameters "-nocase "};
if {$::find_all == 1} {append parameters "-all "};
if {$::direction == 1} {
    append parameters "-backwards";
} else {
    append parameters "-forewards";
}

.text search $parameters $search_for $idx;
这样,我在尝试搜索时会出现以下错误:

bad switch "-nocase -forewards": must be --, -all, -backwards, -count, -elide, -exact, -forwards, -nocase, -nolinestop, -overlap, -regexp, or -strictlimits

请告诉我有一个同样简洁的方法来写这个?我担心我必须为用户设置的每个选项组合创建不同的搜索

您正在将参数定义为字符串。它需要是在调用搜索命令时展开的列表。它看起来像这样:

set parameters [list]
if {$::match_exact == 1} {lappend parameters "-exact"}
...
.text search {*}$parameters $search_for $idx

啊,我想是这样的-谢谢你的快速回复!