本帖最后由 plp626 于 2011-8-14 12:27 编辑
非常好的话题,无奈讨论的人真的很少,变量型函数(有时我叫它内敛函数)迟早会引起大家广泛关注,现在没有,只是时间问题;如果有bat人对批处理函数感兴趣,变量型函数是最佳研究对象;
关于楼主的问题
变量嵌套用多层for变量解释;对于独立for循环,加括号()用&连接即可;
=============================================
我遇到的问题是:
对我的脑袋来说,某些必须用预处理%%扩展后解释执行的复合语句(变量型函数就属于这样的语句)如何扩展,即变量型函数内不能再含有变量型函数,更不能递归(要突破这两点可能需要大家共同的智慧);
还有就是变量名空间的问题,我们用这类函数两个目的,短小加速度,变量型函数如果每个都要用setlocal和endlocal获得返回值,这个开销也是不小的,代码长了近100字节,速度也降低了,对于多个变量的返回这样的做法很难处理,要额外增加不少空间和时间的开销。
于是我都是用特殊前缀来标识函数中的变量,这样很简洁,但新的问题是我们如何有效管理这些垃圾变量?
====================================
没有真正接触这类变量型函数的编写,可能看帖不知所云,这很正常;大家对很多问题的表述所用的术语也不统一,这更是导致了理解上的困难;
为此我出几道题,大家编写试试,以体会楼主和我所云;
getnl函数
执行%getnl:##=nl%后,nl变量的值变成换行符;
pset函数
执行%pset:##=arrx,arry%后,把arrx所对应的变量值做为变量名,把arry所对应的变量值赋逐一赋给arrx所对应的变量;
比如现有:- arrx[1]=a
- arrx[2]=b
- arrx[3]=abc
- arry[1]=X
- arry[2]=Y
- arry[3]=XYZ
复制代码 执行%pset:##=arrx,arry%后会得到变量,对应的变量值如下:复制代码 |