Isso funciona bem:
> lmap x {a b c} {string trim cmd.$x}
cmd.a cmd.b cmd.c
> lmap x {a b c} {list cmd.$x}
cmd.a cmd.b cmd.c
Em ambos os casos, os string trim
e list
são um tanto inúteis. E por inútil quero dizer que eles não modificam/adicionam algo ao resultado. Existe uma maneira melhor?
Eu tentei estes, mas eles não têm o resultado que desejo:
> lmap x {a b c} {return cmd.$x}
cmd.a
> lmap x {a b c} {return -code return cmd.$x}
cmd.a
> lmap x {a b c} {return -code continue cmd.$x}
cmd.a
Este é exatamente o motivo pelo qual
string cat
foi adicionado (cat
para con cat enate, por analogia com o comando Unixcat
e a função Cstrcat()
). A operação que ele faz é básica para a linguagem Tcl como você notou, mas tê-lo como comando tornalmap
mais fácil.Esse
lmap
script de corpo é compilado para um bytecode com eficiência máxima.Antes de
string cat
ser adicionado, a forma oficial erareturn -level 0 cmd.$a
que acaba sendo a mesma coisa, mas na verdade não é mnemônico! Descobriu-se que era totalmente pesado nas versões beta 8.6, entãostring cat
foi feito rapidamente e houve alegria entre os testadores beta.Não sei por que você evita usar
string trim
, de qualquer forma, você pode usarlrange