相当于 tcl 中的#define?
tcl中有没有相当于C++#define的命令?我已经看到了使用 proc 函数重载来实现“定义”的方法,只是想知道是否有人知道更直接的方法
Is there a command in tcl that is equivalent to C++ #define? I've seen ways to implement "define" using overloading of the proc function, just wanted to know if anyone knows of a more starightforward way
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
interp alias
允许您在创建别名时使用a
和b
的内容:如果您需要使用调用时的值,您需要一个辅助过程:
在 8.5 中,也可以使用别名和
apply
编写:在 8.6 中,您可以使用
tailcall
进一步优化code>:您还可以使用其他一些更肮脏的技巧,如下所示:
虽然这不是特别快,但它确实适用于所有 Tcl 8.* 版本。
The use of
interp alias
allows you to use the contents ofa
andb
at the time the alias was created:If you need to use the values at the time it is called, you need a helper procedure instead:
In 8.5, this can also be written with aliases and
apply
:In 8.6, you can optimize further by using
tailcall
:You could also use some other, dirtier tricks like this:
That's not especially fast though, but it does work in all Tcl 8.* versions.
Tcl 有一种机制可以让您定义过程的别名在口译员中。
如果你
发现你总是传递 $a 和 $b 作为前两个参数,你可以这样写:
现在你可以说:
示例:
interp alias
命令中的空大括号只是表示当前的解释器。你可以和奴隶翻译一起做很多有趣的事情。Tcl has a mechanism that lets you define aliases to procedures in an interpreter.
If you have
and you find you're always passing $a and $b as the first two arguments, you can write:
And now you can say:
example:
The empty braces in the
interp alias
command merely signify the current interpreter. You can do lots of fun things with slave interpreters.或者,您可以将 proc 定义为期望 d 和 e 作为具有默认值(例如空字符串)的输入参数,例如,
如果您要拥有未知数量的输入参数,您可以使用单词
args
,这将创建一个包含args
中每个值的列表,例如欢呼
布莱恩
Alternatively you can define your proc to expect both d and e as input parameters with a default value (e.g. empty string) e.g.
If you're going to have an unkown number of input parameters you can use the word
args
, which will create a list containing each value inargs
e.g.cheers
Brian
如果“接收相同的参数”意味着您重复为
$a
、$b
和$c
传递相同的值,那么您的一种选择是使用全局变量而不是函数参数。在调用函数之前将值存储在其中,然后您的函数调用就会简化为 foo $d 等。If by "receives the same arguments" you mean that you are repeatedly passing the same values for
$a
,$b
, and$c
, then one option you have is to use globals instead of function parameters. Store values in them before calling your function, and then your function call simplifies down tofoo $d
, etc.