#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
почти устаревшим за одну ночь.)