Я новичок, который недавно изучил некоторые TCL и недавно столкнулся с удивительным внутренним процессом TCL, который я не могу объяснить. У меня есть код ниже:
proc print_items{args} {
foreach item $args {
puts $item
}
}
set arr "A B C D"
print_items $arr
Я ожидал, что результат будет:
A
B
C
D
, но это было:
A B C D
При ближайшем рассмотрении. Я заметил, что $ args не был плоским списком, который я думал, но вместо этого был
> puts $args
{A B C D}
> llength $args
1
Это означает, что сам $ args должен был быть перенесен в другой список, т.е. $ args должен был быть таким, когда получен процедурой: {{ABCD}}
Итак, мой вопрос: почему TCL оборачивает уже сформированный список в другой список, когда передается в print_items? Это очень отличается от других языков программирования, которые я сделал. При каких обстоятельствах аргумент включается в другую структуру данных (т.е. в другой список, словарь, массив и т. Д.)?