Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11702|回复: 5

Skill 函数传递参数 @rest @optional @key 的区别

[复制链接]
发表于 2013-4-6 15:58:54 | 显示全部楼层 |阅读模式

@rest
@rest允许任意多个参数传递个函数,@rest的参数保存在单个的list中

  1. procedure(trTrace(fun @rest args)
  2. let((result)
  3. printf(“\nCalling %s passing %L” fun args)
  4. result=apply(fun args)
  5. printf(“\nReturning from %s with %L\n” fun args)
  6. result
  7. );end let
  8. );end procedure
复制代码
上面声明一个函数名为 trTrace的函数,该函数传递一个不确定的参数args。
当以以下方式调用函数时,返回值为6。
trTrace( ‘plus 1 2 3 ) => 6
Calling plus passing (1 2 3)
Returning from plus with 6

以上函数调用函数plus,并将第二个参数中的值全部传递给plus函数。

@optional
@optional是另外一个可以指定任意个参数的选项,一般,在使用@optional时需要给参数一个默认的值,
当函数传递时未使用该参数传递值是,那么将使用该参数的默认值。

  1. procedure(trBuildBox(height width @optional (xCoord 0) (yCoord 0))
  2. list(xCoord:yCoord xCoord+width:yCoord+height)
  3. );end procedure<
复制代码
以上代码声明一个函数名为trBuildBox的函数,该函数有四个参数,height、width、xCoord、yCoord。
这四个参数中,xCoord和yCoord是可选参数,默认值都为0。当未给这两个参数传递值时,函数将使用其
默认的值。请参考以下调用函数的结果。
trBuildBox( 1 2 ) => ((0 0) (2 1)) ;指定第一个和第二个参数的值,xCoord和yCoord使用默认值0。
trBuildBox( 1 2 4 ) => ((4 0) (6 1)) ;指定第一个和第二个参数的值,xCoord值为4,yCoord使用默
认,0。
trBuildBox( 1 2 4 10) => ((4 10) (6 11)) ;同时指定四个参数的值。

@key
@key与@option类似,在为指定参数时,都使用默认值,但是在函数调用时@key必须要求指定确定的参数

  1. procedure(trBuildBox(@key (height 0) (width 0) (xCoord 0) (yCoord 0))
  2. list(xCoord:yCoord xCoord+width:yCoord+height)
  3. );end procedure
复制代码
请参考以下函数调用的结果:
trBuildBBox() => ((0 0) (0 0))
trBuildBBox( ?height 10 ) => ((0 0) (0 10))
trBuildBBox( ?width 5 ?xCoord 10 ) => ((10 0) (15 0))


发表于 2013-5-26 18:22:40 | 显示全部楼层

回帖奖励 +1 SKILL币

好贴。谢谢分享
发表于 2014-4-15 10:53:33 | 显示全部楼层
讲解的很清楚,学习了。
发表于 2017-3-1 06:05:38 | 显示全部楼层
好贴。谢谢分享
发表于 2021-1-3 21:17:22 | 显示全部楼层
学习了,谢谢分享
发表于 2021-4-3 11:25:35 | 显示全部楼层
谢谢,学习了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-20 12:13 , Processed in 0.148258 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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