zoukankan      html  css  js  c++  java
  • tcl脚本学习十二: upvar的学习

    lesson 12 : upvar的学习

    example ①

    upvar 很象c语言的引用传参,我用一个例子说明
    set a 1 ;#定义变量a, 并且值设为1
    proc test {b} {
    upvar $b mya
    puts $b
    puts $mya
    }
    test a ;#调用函数 test
    a ;#参数b的值为a(变量名)
    1 ;#由于upvar 使mya(变量名)指向a(变量名)指向的同一个变量,mya的为a的值
    upvar使的在函数内部可以更改函数外部的变量的值


    example ②


    proc SetPositive {variable value } {
    upvar $variable myvar;
    if {$value < 0} { set myvar [expr -$value];} else {set myvar $value;}
    return $myvar;
    }

    SetPositive x $x ;#调用转换函数处理变量 x
    SetPositive y $y ;#调用转换函数处理变量 y
    puts "X : $x Y: $y "
    //可发现 均为5,改变了外部的数值


    example ③ :


    proc two {y} {
    upvar 1 $y z ;# tie the calling value to variable z
    upvar 2 x a ;# Tie variable x two levels up to a
    puts "two: Z: $z A: $a" ;# Output the values, just to confirm
    set z 1; ;# Set z, the passed variable to 1;
    set a 2; ;# Set x, two layers up to 2;
    }
    //evel 有两种表示方式。当 level 为一个整数值时,表示从当前作用域向全局作用域上溯到
    level 层作用域。比如 level 为 1 时,代表调用过程作用域,level 为 2 时为上一层作用域
    //比如 level 为#0,则
    //表示全局作用域,此时的作用同 global 命令。

    example ④ :涉及到二级 一级优先级
    ;# A first level proc - This will be called by the global space code.
    proc one {y} {
    upvar $y z ;# This ties the calling value to variable z
    puts "one: Z: $z" ;# Output that value, to check it is 5
    two z; ;# call proc two, which will change the value
    }

    one y; ;# Call one, and output X and Y after the call.
    puts " X: $x Y: $y"

  • 相关阅读:
    撬动百亿VRAR产业,让VR们“造”起来
    带你熟悉鸿蒙轻内核Kconfig使用指南
    教你Python字符串的基本操作:拆分和连接
    从翻硬币游戏看敏捷开发
    求助,请教各位,如何牵头做一个项目
    Qt三方库开发技术:QXlsx介绍、编译和使用
    项目实战:Qt+ffmpeg摄像头检测工具
    OpenSSL 自述
    用故事说透HTTPS
    一起来看看大佬是怎样配置nginx虚拟主机
  • 原文地址:https://www.cnblogs.com/gold-life/p/5731146.html
Copyright © 2011-2022 走看看