Проблема TCL: импортированная функция get скобка ({}) добавлена ​​вокруг «текста» - PullRequest
1 голос
/ 28 мая 2019

У меня есть файл типа «библиотека», в котором я определяю пространство имен и экспортирую некоторые функции для «печати» отладочной информации или «трассировки» информации в TCL.

proc cputs  { args } {
    puts "Test= $args"
}

Я импортирую эту функцию в несколько других файлов. Когда я использую его, все нормально, за исключением того, что он добавляет скобку к выводу.

Например, если я позвоню cputs "Hi there", он выдаст {Hi there} вместо Hi there.

Не могу найти ничего, чтобы объяснить это. Я бы хотел воспользоваться этими скобками.

Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Если вы не хотите передавать произвольное, неизвестное количество аргументов вашему cproc, не используйте args (который имеет особое значение в качестве имени параметра), но, например, msg.

proc cputs  {msg} {
    puts "Test= $msg"
}

См. Также proc документация :

Если последний формальный аргумент имеет имя «args», то вызов процедура может содержать больше фактических аргументов, чем процедура формальные аргументы. В этом случае все фактические аргументы начинаются на тот, который был бы назначен для аргументов объединяются в список (как если была использована команда list); это объединенное значение присваивается локальная переменная args.

1 голос
/ 29 мая 2019

Если вы хотите принять произвольное количество аргументов (поскольку args - это специальное имя), вы должны join или concat вещи перед печатью.Эти два варианта отличаются обработкой лишних пробелов;используйте тот, который подходит вам.

proc cputs { args } {
    puts "Test= [join $args]"
}

cputs "Hello there   " "   from an example"
# Test= Hello there      from an example 
proc cputs { args } {
    puts "Test= [concat {*}$args]"
}

cputs "Hello there   " "   from an example"
# Test= Hello there from an example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...