tcl里如何定义函数(一):基础使用
专栏:iLoveIC Sept. 6, 2025, 5:51 p.m. 7 阅读
本文介绍tcl里定义函数的方法

一、基础用法

定义一个函数用proc关键字,后跟函数名,参数,函数主体大三部分。函数调用时,函数名后空格格开各个参数。

proc func_name {a b} {
    puts "$a,$b"
}
func_name "hello" "world" 
#运行后将输出:hello,world

二、函数里如何操作外部变量(全局变量)

如果要在函数内部读取或修改函数外部变量(全局变量),就需要在函数内部开头用global xxx申明一个外部变量。下面的程序,定义了一个全局变量c,在函数func_name里第一行申明一下外部变量global c。声明之后就可以读取和修改外部变量值了。在函数执行完后,再puts "$c"发现外部变量c已经被修改掉了。

set c "ni hao"
proc func_name {a b} {
    global c
    puts "$a,$b"
    puts "$c"
    set c "da jia hao"
    puts "$c"
}
func_name "hello" "world"
puts "$c"
# 输出log
hello,world
ni hao
da jia hao
da jia hao

三、tcl函数给参数指定默认值的方法

由于tcl函数是按参数定义的顺序来调用的,因此我们要把带默认值的参数放在最后。下面定义了两个参数a和b,并为a指定了默认参数“Hi”。第一次调用时,把传“hello”传给a,第二次调用时少传了一个参数,那么tcl就使用了函数定义时的参数默认值。

proc func_name {b {a "Hi"}} {
    puts "$a,$b"
}
func_name "Li Lei" "hello"
func_name "Han Meimei"
# 输出log
hello,Li Lei
Hi,Han Meimei

如果带默认值的参数没有放在最后,tcl会报类似的错误:wrong # args: should be "func_name ?a? b"

 

感谢阅读,更多文章点击这里:【专栏:iLoveIC】
最新20篇 开设专栏