|
|
发表于 2012-11-14 08:37:02
|
显示全部楼层
本帖最后由 qzwqzw 于 2012-11-14 17:45 编辑
是否说明我们也许要另外构造一些专门针对类数组的函数?
这个可以有,但未必是必须的,因为大多数场合下,我们只会对这个类数组进行简单的操作
这个你成功的说服了我,确实在函数内部定义引用宿主脚本的环境变量不是必须的
这个我是受了过去代码的思维定势了
%~f0的用法我以前见到过,只不过没有留下印象
现在我对它的印象是比较深刻了
exit /b 我一直有比较大的成见,因为效率太低了 call 脚本中遇到exit/b 退出就一去不返了
我认为exit /b可以用在抛出错误的特定场合
这种场合下“退出就一去不返”是需要的特性
而大多数的脚本错误抛出不会太多次
所以效率是不需要着重考虑的问题
goto :eof 和 exit/b 相比,我觉得无论是效率还是功能都完全处于劣势,个人认为,最好的方案还是使用外置函数,一来不需要花费逐行寻找标签的时间,二来运行到文件末尾时自然会结束函数。
goto :eof仍然应该是大多数函数结束自身的代码
一者是编程者的思维惯性
二者是与外置函数需要重新定位文件相比,它的效率未必低多少
况且goto :eof有着与goto :end不同的处理方式
效率未必会差到哪里
这种场合我还没有遇到过
一般来说如果在函数内部改写了外部变量
那么至少在函数结束前这个改写都是有效的
只需要在函数结束前用endlocal&set
那么这个改写就持久化了
除非遇到函数内部以类exit的形式非正常结束
这个改写才是无效的
但如果将类exit的形式定义为只有发生错误才能使用
那么不改写反而符合正常的逻辑
干脆用高级语言的栈空间思想吧, 临时变量函数内部的变量都用栈来维护
栈的结构决定了存取时的复杂性
将这种复杂性普遍应用于整个库上是得不偿失的
14楼变量批量复制的实现不错
递归是迟早要考虑的,一大堆的脚本,互相调用,掉得多了,迟早会遇到有间接调用自己的时候
递归是少部分函数需要考虑的事情
另外凡是支持递归的函数都应该自己设置递归终结
我还看不出递归和声明函数调用依赖之间的关系
另外由于递归带来的另一问题是setlocal的层级限制
所以如果是支持递归的函数
建议不使用setlocal
或者在内部另使用一组标签来进行递归
这个与函数内部if...goto...形式的条件循环类似
由此带来另外一个问题
函数内部的标签命名是否需要标准化
以避免出现多个类似:loop/:menu/:end重复标签的情况发生 |
|