List 将变量追加到tcl中的列表

List 将变量追加到tcl中的列表,list,append,tcl,List,Append,Tcl,我有一个foreach循环,它执行一些处理,并将一个变量附加到现有列表中,如下所示: set lst_tmp [list]; foreach item $lst_entities { set lst_tmp $item; #1 set result [::somefunc $item]; if {$result ne -1} { lappend lst_tmp $result; #2 } } proc ::somefunc {entityType}

我有一个
foreach
循环,它执行一些处理,并将一个变量附加到现有列表中,如下所示:

set lst_tmp [list];
foreach item $lst_entities {
  set lst_tmp $item;          #1
  set result [::somefunc $item];
  if {$result ne -1} {
    lappend lst_tmp $result;  #2
  }
}

proc ::somefunc {entityType} {
  if {$entityType eq ""} {
    return -1;
  } 
  if {$entityType in {mats props comps}} {
    return 1;
  }
  return 0;
}
问题是当我的
lst_tmp
在#1处填充了
$item
,但在#2之后,
lst_tmp
值类似于
{item1 result}
。它不计算
$result
的值,而是直接将变量名追加到列表中

我没有在tcl上做过很多工作,所以我不确定我对lappend的使用是否有误


有什么意见吗

你能在这里指定somefunc过程吗?为了完成你的代码,那么问题的来源就更容易了?@stark添加了somefunc过程。比如说,如果lst_实体包含元素{1 2 mats props item comps},你希望lst_tmp在使用你的代码时看起来是什么样子?
somefunc
看起来合理,除了放在调用它的代码下面。主循环有一个主要问题:在循环之前和循环内部设置
lst\u tmp
。你到底想达到什么目的?当你有一个定义的输入时,给出你想在最后得到的东西…对我来说很好:set lst_tmp[list];set lst_entities“mats props comps”proc::somefunc{entityType}{if{$entityType eq'}{return-1;}if{$entityType in{mats props comps}}{return 1;}return 0;}foreach item$lst_entities{set lst_tmp$item;#1 set result[::somefunc$item]if{$result ne-1}{lappendu tmp$result;}2}放置$lst_tmp此输出comps 1您是否在{}块中的某处对其进行评估。