Попытка использовать keylset и keylget в Tcl

#tcl

#tcl

Вопрос:

Когда я использую подобный код tcl, он работает нормально

 keylset mylist LastName Hello FirstName World
puts [keylget mylist LastName]
puts [keylget mylist FirstName]
 

Вывод:
Здравствуйте
Мир

Теперь, если я хочу сохранить эти пары ключей и значений в переменной, а затем запустить ее, я получаю сообщение об ошибке

 set mylist2 {LastName Hello FirstName World}
keylset mylist $mylist2
puts [keylget mylist LastName]
 

я получаю сообщение об ошибке — я знаю, что использую неправильные аргументы для keylset, но я не знаю, что еще я могу сделать.

Комментарии:

1. Для тех, кто играет дома, две рассматриваемые команды являются частью пакета TclX и не входят в базовый Tcl.

Ответ №1:

Моим первым предложением было бы расширить этот список аргументов до keylset , учитывая, что все это работает с прямыми аргументами:

 keylset mylist {*}$mylist2
 

(В старых версиях Tcl вы бы использовали eval keylset mylist $mylist2 вместо этого, но это не рекомендуется, поскольку это может привести к потенциальным опасностям при оценке, а безопасная версия, eval [linsert $mylist2 0 keylset mylist] , действительно ужасна. Это было большое изменение языка с 8.4 на 8.5, и в основном оно стало eval почти устаревшим за одну ночь.)