zgbl 发表于 2011-8-19 00:41:26

原帖由 zyffp 于 2011-8-19 00:37 发表 http://pkuxkx.com/forum/images/common/back.gif
在4.62里执行#exec @@a 才可以的
我原来记得是可以的,才想起来
……

猜测下:


zmud的各种#和%归结到底层毕竟是各种函数,#是void型无返回函数,%是有返回函数,#exec就是一个无返回函数,仅仅是把输入值进行识别,输出到zmud的指令系列里

那么@a只是为了把a这个符号识别成变量,等同于编程里直接调用a

那么@@a是什么,传址调用?&a?*a?
如果是@@a等同于编程里的*a,那么我也许能够理解#exec @@a能执行的原因了……

[ 本帖最后由 zgbl 于 2011-8-19 12:43 AM 编辑 ]

zgbl 发表于 2011-8-19 00:41:40

原帖由 afu 于 2011-8-19 00:40 发表 http://pkuxkx.com/forum/images/common/back.gif


似乎也不行
刚试验了,可行

afu 发表于 2011-8-19 00:43:29

原帖由 zgbl 于 2011-8-19 12:38 AM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
看懂了

%1储存到@a其实就是从输入流(steam_input面向对象编程的一个概念),通过函数转化成特定种类的变量(比如整形int和字符型char,zmud变量虽然不分类,实际用起来其实是分这两种的)
而@a用#exec执行不行, ...

看吧看吧,我就知道,迟早要说出我听不懂的来yct1

zyffp 发表于 2011-8-19 00:43:53

#var aa {w;n;s};#al aa1 {#exec @@aa};aa1

您的英文名字:w
n
s
对不起,你的英文名字必须是 3 到 12 个英文字母。
您的英文名字:对不起,你的英文名字必须是 3 到 12 个英文字母。
您的英文名字:对不起,你的英文名字必须是 3 到 12 个英文字母。
您的英文名字:

在4.62里可行

zgbl 发表于 2011-8-19 00:49:05

搜索引擎没法搜@@这个字眼,不然可以查一下@和@@有啥区别

afu 发表于 2011-8-19 00:52:50

原帖由 zyffp 于 2011-8-19 12:43 AM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
#var aa {w;n;s};#al aa1 {#exec @@aa};aa1

您的英文名字:w
n
s
对不起,你的英文名字必须是 3 到 12 个英文字母。
您的英文名字:对不起,你的英文名字必须是 3 到 12 个英文字母。
您的英文名字:对不起, ...

经测试,貌似这是正解,
虽然马后炮,但@@这种用法,我以前曾在书剑机器人里面见人用过……
哈哈,谢谢各位啦!

zyffp 发表于 2011-8-19 00:57:56

我也是早先玩xyj的时候从一个用4.62做全自动的大神的机器里学到的,虽然不明白道理

zgbl 发表于 2011-8-19 01:00:18

原帖由 zyffp 于 2011-8-19 00:57 发表 http://pkuxkx.com/forum/images/common/back.gif
我也是早先玩xyj的时候从一个用4.62做全自动的大神的机器里学到的,虽然不明白道理
这个已经是数组操作的范畴了,#ALIAS则是自定义函数的范畴,那位大神是把zmud当做一个特殊的编程语言来用了。。。

buffet 发表于 2011-8-19 12:25:34

我猜4.62可能在解析脚本模式(也就是执行#开头的指令)里的变量和函数时,它会把储存值扩展成一个类似value的一个绝对值。

那么因为#EXEC这个指令可能有两部分。第一部分是把你输入的命令转化为指令栏模式的命令,第二部分是把转化成指令栏模式的命令送到Mud里去。

问题是,4.62在第一部分作扩展的时候,把@a的储存值扩展成一个类似value的一个绝对值,也就是说它用"把x;y;z框上,变成“x;y;z”。

而@@或者%%在Zmud里是把扩展延迟的语法。所以当Zmud执行#EXEC @@a时,它会把@a的扩展延迟到下一个执行指令。它也会把第一个@符号除掉。那么在第二部分执行命令时,由于现在是指令栏模式,而不是脚本模式,所以它不会把@a的扩展加上"。用7.21是没有这个问题的。可能#EXEC在第一部时不再用"框上x;y;z。

但是一般来说,Zmud在解析指令栏里输入的一般命令时(就是不带#开头的信息),它是不会把任何变量进行扩展。所以你在指令栏里写“say @a”,它就会直接把“say @a”送到mud里面,你会看到“你说道:「@a」。” 所以我觉得4.62是怪怪的。

[ 本帖最后由 buffet 于 2011-8-19 12:31 PM 编辑 ]

buffet 发表于 2011-8-19 12:43:21

我在官网里的版本历史里找到这个:

5.18 4-Feb-98 (BETA version)

#EXEC command now handles multiple commands stored in variables      properly

看来5.18版本以前的#EXEC是不能执行多重命令的。大家还是用7.21吧。


[ 本帖最后由 buffet 于 2011-8-19 12:44 PM 编辑 ]
页: 1 2 3 [4] 5
查看完整版本: 请教如何把一个变量的内容转换成alias?(解决方法见21楼)