Как сделать так, чтобы tcl switch возвращал постоянное значение? - PullRequest
0 голосов
/ 19 января 2019

Как мне получить switch для возврата постоянного значения? Например:

set z [switch a { 
    default {expr {{val}}} 
}]

Этот надуманный пример устанавливает z в val. expr - верный способ вернуть константу из переключателя? Это много брекетов. Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Для константных выражений совсем не плохо использовать expr подобным образом. В противном случае, если вы используете Tcl 8.6, то у вас есть string cat, который отлично подойдет для этого при использовании с одним аргументом.

set z [switch a {
    default {string cat "val"}
}]

До 8.6 (или с очень ранними точечными выпусками 8.6) вам нужно было использовать это вместо:

set z [switch a {
    default {return -level 0 "val"}
}]

Это на самом деле работает правильно - он также эффективно скомпилирован с помощью байт-кода - но он всегда казался мне очень надуманным.


Я склонен помещать свои set в мои switch, а не наоборот, так что эта конкретная проблема обычно спорна для меня. Однако методы, описанные здесь, чрезвычайно полезны для тела вызова lmap.

0 голосов
/ 19 января 2019

Более распространенный подход для возврата значения - использовать команду set:

set z [switch a { 
    default {set _z val} 
}]
...