• 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"

  • 相关阅读:
    Using sudo inside a docker container
    python enumerate用法总结
    如何保存Keras模型
    python pickle模块
    如何选择开源项目的license
    github在线创建文件夹
    关于python3.4版本中的zip函数
    使用sqoop 在关系型数据库和Hadoop之间实现数据的抽取
    HBase Shell 常见操作
    Java API 实现HBase的数据添加与过滤查询
  • 原文地址:https://www.cnblogs.com/gold-life/p/5731146.html
Copyright © 2020-2023  润新知