0

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

这是我尝试过的以及我打算在这里做的事情:

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

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

4

1 回答 1

2

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

set parameters [list]
if {$::match_exact == 1} {lappend parameters "-exact"}
...
.text search {*}$parameters $search_for $idx
于 2014-07-20T20:27:09.477 回答