Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 44774|回复: 25

SKILL编程常见报错及解决办法(持续更新中……)

[复制链接]
发表于 2013-3-23 23:43:26 | 显示全部楼层 |阅读模式
1.系统无回应
如果函数中有返回值,执行函数时,无任何响应。很有可能出犯了了以下错误
1)左括号与右括号不平衡,右括号可能比左括号少;
2)不平衡的引号
3)错误的LOG文件过滤设置
下面列出了两种方法用于解决以上可能出现的问题:
1)使用右括弧(])将所有尚未关闭的右括弧关闭
2)如果使用上面的方法系统还是无响应,可在右括弧(])后面加一个双引号(“)。
通常,使用以上两种方法后,系统将会出现响应。
2.不适当的空格字符
在函数名和左括号之间切记不要留空格,以下例子在函数名和左括号之间出现了空格,函数执行时,产生报错。
1)使用 strcat 函数合并多个字符串
strcat ( “Mary” ” had” ” a” ” little” ” lamb”)
Message: *Error* eval: not a function – “Mary”
2)将函数值分配给一个变量
greeting = strcat ( “happy” ” birthday” )
Message: *Error* eval: unbound variable – strcat
3.不匹配的数据类型
当一个不匹配的字符传递个一个 Skill 函数时,系统将产生报错,错误消息包含一个类型模板,表明该错误是由于什么原因引起的。如下:
strcat( “Mary had a” 5 )
Message: *Error* strcat: argument #2 should be either
a string or a symbol (type template = “S”) – 5

下面分别讲解各种报错:
1.  E- *Error* procedure: too few arguments (at least 2 expected, 1 given) - ((XXX))
     E- *Error* test: too many arguments (2 expected, 3 given)  
     产生以上报错主要由于函数传递的参数不一致导致的。
     比如新建以下函数:
  1. procedure(test(arg1 arg2)
  2.         if(arg1 >= arg2
  3.                 then
  4.                         printf("%d >= %d \n" arg1 arg2)
  5.                 else
  6.                         printf("%d < %d \n" arg1 arg2)
  7.         )
  8. );end procedure
复制代码
  1.     Skill > test(2 3)     
复制代码
执行test(2 3) 函数运行正常,当传递参数不一致时会导致这种错误。
    为避免这种错误,在函数参数中可使用@rest @optional @key关键词。

2.  E- *Error* procedure: illegal formal list - XXX
     产生该报错很可能是由于函数名后面没有立刻出现括号。之间可能存在空格。
  1. procedure(test (arg1 arg2)
  2.         if(arg1 >= arg2
  3.                 then
  4.                         printf("%d >= %d \n" arg1 arg2)
  5.                 else
  6.                         printf("%d < %d \n" arg1 arg2)
  7.         )
  8. );end procedure
复制代码
上面函数中,函数名test与括号之间有个空格,加载的时候会产生该报错。

3.E- *Error* axlFormDisplay: argument #1 should be any user-defined (other) type (type template = "o") - nil
该问题一般出现在FORM不能显示,产生该报错一般是因为FORM文件有误。未加载成功。比如将FIELD写成FILED。这种问题必须一个一个仔细的检查。FROM的格式很严格,一点小问题都不能出现,否则FORM不能顺利加载。。。

4.E- *Error* greaterp: can't handle (nil > 3623.6)
出现该问题,是因为使用了大于符号,但传递的参数中有一个值为nil,不能进行比较运算。因此产生该错误。类似的还有小于。
  1. procedure(Compare(a b)
  2.         if(a>b
  3.         then
  4.                 axlUIWPrint(nil "a>b")
  5.         else
  6.                 axlUIWPrint(nil "a<=b")
  7.         );end if
  8. )
复制代码
Skill > Compare(23 nil)
E- *Error* greaterp: can't handle (23 > nil)
ERROR
Skill > Compare(3 5)
a<=b
t

5.*Error* load: can't access file
出现这种错误一般是由于加载SKILL的时候未找到文件,请确认加载路径正确。检查文件名是否有误。若无法找到原因,可使用绝对路径加载试试。

6.W- *WARNING* (axlDBAddProp): Not a floating point number!
出现这个问题,我也纠结了很久。源代码如下:

  1. HIGH_VALUE = axlUIPrompt( "Please Input High" "0")
  2. axlDBAddProp(selComps '("HIGH" HIGH_VALUE))
复制代码
仔细检查,才发现原来是list使用错了。当使用单引号指定list时,每个元素就为一个值,不能通过变量传递。所有当使用该函数时,将HIGH_VALUE识别成一个值,而不是变量。
最后修改成axlDBAddProp(selComps list("HIGH" HIGH))即可解决报错信息。



持续更新中……
发表于 2013-5-1 20:20:16 | 显示全部楼层
哇,总结的不错哈。
发表于 2013-6-20 10:34:54 | 显示全部楼层
本帖最后由 XYX365 于 2013-6-20 10:36 编辑

E- *Error* defun: argument #1 should be a symbol (type template = "sgg") - _Check_Refdes_main()
=>必須將_Check_Refdes_main() 改為_Check_Refdes_main () , main () 之間要空格
发表于 2013-8-9 13:21:12 | 显示全部楼层
总结的很好,辛苦了
发表于 2013-10-4 15:07:30 | 显示全部楼层
总结的不错!辛苦辛苦
发表于 2014-1-2 21:14:46 | 显示全部楼层
謝謝分享喔  學習了
发表于 2014-1-6 08:12:24 | 显示全部楼层
学习了,谢谢分享
发表于 2014-5-1 23:41:29 | 显示全部楼层
建议楼主也把正确的写上去
发表于 2014-5-13 11:01:35 | 显示全部楼层
謝謝分享喔  學習了
发表于 2014-12-15 23:07:02 | 显示全部楼层
这个很有用的,感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-11-23 16:56 , Processed in 0.133321 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表