北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: afu

请教如何把一个变量的内容转换成alias?(解决方法见21楼)

[复制链接]
发表于 2011-8-19 00:41:26 | 显示全部楼层
原帖由 zyffp 于 2011-8-19 00:37 发表
在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 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-19 00:41:40 | 显示全部楼层
原帖由 afu 于 2011-8-19 00:40 发表


似乎也不行

刚试验了,可行
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-8-19 00:43:29 | 显示全部楼层
原帖由 zgbl 于 2011-8-19 12:38 AM 发表
看懂了

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


看吧看吧,我就知道,迟早要说出我听不懂的来
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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里可行
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-19 00:49:05 | 显示全部楼层
搜索引擎没法搜@@这个字眼,不然可以查一下@和@@有啥区别
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-8-19 00:52:50 | 显示全部楼层
原帖由 zyffp 于 2011-8-19 12:43 AM 发表
#var aa {w;n;s};#al aa1 {#exec @@aa};aa1

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


经测试,貌似这是正解,
虽然马后炮,但@@这种用法,我以前曾在书剑机器人里面见人用过……
哈哈,谢谢各位啦!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-19 00:57:56 | 显示全部楼层
我也是早先玩xyj的时候从一个用4.62做全自动的大神的机器里学到的,虽然不明白道理
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-19 01:00:18 | 显示全部楼层
原帖由 zyffp 于 2011-8-19 00:57 发表
我也是早先玩xyj的时候从一个用4.62做全自动的大神的机器里学到的,虽然不明白道理

这个已经是数组操作的范畴了,#ALIAS则是自定义函数的范畴,那位大神是把zmud当做一个特殊的编程语言来用了。。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-17 06:43 AM , Processed in 0.013698 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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