在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1758|回复: 8

[求助] skill函数里的变量

[复制链接]
发表于 2022-9-1 14:52:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
skill函数不是可以设置一些参数,但是有个带单引号的参数我不懂是什么意思。两个问题,一个是单引号的作用是什么,第二个hiCreateIntField()函数第一个参数解释我没理解。希望大家不吝赐教。
c0216d05eab436f4aa0d70118c98aed.png
3c8e5ffc4611546c2ccc42b75cb8b79.png
发表于 2022-9-1 15:18:46 | 显示全部楼层
符号
发表于 2022-9-1 15:31:34 | 显示全部楼层


1) SKILL语言中单引号的作用,可以简单的理解为 “do not evaluate”, 就是一个未初始化的变量,在初始化之前可以这么引用它。比如在 CIW窗口里面,随便敲入一个 abc,CIW窗口会反馈一个未定义变量的错误,这是CIW的SKILL语言解释器 evaluate了abc这个变量的时候发现未曾定义过所给出的信息。 反之,如果敲入 'abc,那么CIW窗口不会报错,当然,也什么都不会做,连内存都不分配给这个变量。

2)myInt = hiCreateIntField(?name 'countApple ...)这个语句里面,hiCreateIntField函数本身返回的是这个整数Field的handler,也就是变量指针。对这个返回值进行evaluate,可以得到这个整数Field 的 object. ?name 'countApple就是赋予这个整数Field一个变量名。这个变量 countApple在产生整数Field之前是不存在的,所以需要加单引号,意思就是“别着急evaluate”。 当整数Field创建完成之后,通过SKILL的命令解释器 evaluate countApple这个变量,也可以得到这个整数Field的object。这里面 myInt和countApple到底有什么区别,我看是几乎没有的,但是在编程实践中,有人习惯把myInt声明为局部变量,所以在某个procedure之外看不到myInt;但是 对于countApple来说,一旦创建成功,就是一个无条件的全局变量,在内存中一直accessible。倒过头来,要想一下,当初为什么要把创建一个GUI的返回值声明为局部变量呢?其实是“局部”不了的,所以这种GUI产生中做的局部变量或者返回值,都没什么意义。做hiCreateIntField的时候,可以直接用,而不需要用一个变量去接收它的返回值,我是没想到有什么意义,如果有,请大家提醒我一下。需要引用这个GUI的时候,直接去evaluate它的handler就可以。

 楼主| 发表于 2022-9-1 15:36:41 | 显示全部楼层


amodaman 发表于 2022-9-1 15:31
1) SKILL语言中单引号的作用,可以简单的理解为 “do not evaluate”, 就是一个未初始化的变量,在初始 ...


多谢大哥,解释的通透。
 楼主| 发表于 2022-9-2 14:32:58 | 显示全部楼层


amodaman 发表于 2022-9-1 15:31
1) SKILL语言中单引号的作用,可以简单的理解为 “do not evaluate”, 就是一个未初始化的变量,在初始 ...


这有个奇怪的地方,按照之前说的临时变量 'countApple 是个全局变量,但我直接用它代替 myInt 运行时说第二个’countApple 是个 unbound variable 。但是同样的命名方法,'myCreamForm却可以被hiDisplayForm()直接读取。这是为什么啊。
f40e0829963661b8d4862cdc67a2d42.png
发表于 2022-9-2 14:52:29 | 显示全部楼层
谢谢分享
发表于 2022-9-2 15:29:21 | 显示全部楼层
谢谢分享
发表于 2022-9-2 16:39:46 | 显示全部楼层


LXS13225665126 发表于 2022-9-2 14:32
这有个奇怪的地方,按照之前说的临时变量 'countApple 是个全局变量,但我直接用它代替 myInt 运行时说第 ...





  1. myfield=hiCreateIntField(?name "countApple"
  2.                 ?prompt "count of apple (0...5)"
  3.                 ?defValue 1       
  4.                 ?range '(0 5)
  5. )
  6. hiCreateAppForm(?name 'myCreamForm
  7.                 ?formTitle "super market"
  8.                 ?fields list(myfield)
  9.                 ?help ""
  10.                 ?callback "printf("say hello")")
  11. hiDisplayForm(myCreamForm)


  12. myCreamForm~>hiFormSym

  13. myCreamForm~>countApple~>hiFieldSym

  14. myCreamForm~>countApple~>range



复制代码


在hiCreateIntField 函数和hiCreateAppForm函数 中,?name变量的赋值直接给了这个Field或者Form的hiFieldSym或者hiFormSym,可以被引用。但是在构造hiCreateForm的field列表的时候,还是需要从SKILL的top-level环境中取到 field object的指针(handler), 所以在代码中,给了 一个新的变量 myfield, 用来接收hiCreateIntField函数的返回值(sorry 前面的理论对于Field这个GUI object来说不太准确)。 hi DisplayForm函数确实可以用赋值到?name的这个变量值来引用。 WHY?最好问Cadence吧,这确实是一个inconsistency.

从后面的三行代码可以看出countApple在myCreamForm这个指向的结构里面可以用来获取field的内部参数, value,range等等。

发表于 2023-7-20 20:30:22 | 显示全部楼层


amodaman 发表于 2022-9-1 15:31
1) SKILL语言中单引号的作用,可以简单的理解为 “do not evaluate”, 就是一个未初始化的变量,在初始 ...


多谢讲解,解除了一些一直以来的疑惑。非常感谢~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-12 12:32 , Processed in 0.029116 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表