北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
12
返回列表 发新帖
楼主: seagate

Cmud的全局变量、多线程和Event

[复制链接]
发表于 2010-1-27 12:29:57 | 显示全部楼层
#VARFUNC和 #FUNCTION有什么区别
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-1-27 13:29:43 | 显示全部楼层
cmud的帮助,看例子中#newvar的变量不影响#var定义的变量。使用中有什么区别,什么情况下用那个
Syntax: #NEWVAR varname value defaultval

Creates a new variable in the current class. Does not search outside the class for any existing variable of the same name. Normally the #VAR command will search for existing variables and modify their value rather than creating a new variable. You can force #VAR to create a variable in the current class by using the syntax:

#VAR ./varname value

#NEWVAR is a shortcut for this syntax, but is a bit more efficient.

NEWVAR examples

#CLASS 0
#VAR A 1
#CLASS NewClass
#NEWVAR A 123
    creates a new variable @A within the current class (NewClass in this example) with a value of 123. Does not modify the existing @A variable like the #VAR command would.
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-1-27 23:56:00 | 显示全部楼层
怎么说呢,这两者之间还是有区别的,区别其实就相当于C语言里面简单的函数定义你可以用简易的写法一句话就写出来,但是复杂的你就要老老实实的定义参数入口,定义返回,里面定义内部变量,等等。。。这就是区别。功能实现上的区别。而且我感觉varfunc实际上是兼容zmud的function而设置的,#function是新的函数形式,由于cmud有了内部变量,有了更直观的参数定义,有了明教的返回值输出方法,所以使用#function而不是变量定义的形式更 能满足你的要求。#varfunc很难实现非常复杂的语法。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-1-28 08:21:25 | 显示全部楼层
newvar 和var的区别是创建变量的地方,一个是在当前目录下,另一个默认是在根目录,创建的2种变量都是全局变量。好处是按目录创建的比较直观,导出方便
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-1-28 11:43:37 | 显示全部楼层

回复 14# 的帖子

#CLASS 0
#VAR A 1
#CLASS NewClass
#NEWVAR A 123
    creates a new variable @A within the current class (NewClass in this example) with a value of 123. Does not modify the existing @A variable like the #VAR command would.

有区别吧,仔细看看例子
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-1-28 14:10:48 | 显示全部楼层
回楼上,例子和我的解释并不冲突
例子中调用#newvar的时候,当前目录已经被切换到了NewClass了。
这时系统里存在2个变量
一个是/@a,另一个是/NewClass/@a
让我头疼的是Cmud在引用值的时候,我没办法区别这2个同名a的变量,这时在别处用@a取值,不确定取到的是哪个

简单的说/NewClass下的脚本中(包括触发、别名等等),使用#newvar命令,操作的都是/NewClass中的全局变量
你可以自己写脚本试试
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-1-28 14:45:50 | 显示全部楼层
全局变量这块cmud特别混乱,你如果弄同名全局变量很容易出错。
我不认为用#newvar创建全局变量和#var就有什么区别,区别也仅仅
是创建时候的位置区别,真的用的时候估计还是一样糟糕。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-3-1 14:18:06 | 显示全部楼层

发现bug

但是这里衍生出另外一个热门话题就是死锁问题。举例来说:
    #trigger {A} {#section {#va var1 1;#if @var2>1 {commands}}
    #trigger {B} {#section {#va var2 1;#if @var1>1 {commands}}
当这两个触发同时运行的时候就会产生问题,由于触发A对var1变量加锁,
但是要等待触发B对var2解锁才能执行下一步,而触发B对var2变量加锁,
但是要等待触发B对var1解锁才能执行下一步,两个语句互相等待资源,
就导致程序陷入死循环,当然也就完蛋了!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-3-1 15:50:01 | 显示全部楼层
已经更新!欢迎指正!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 04:16 PM , Processed in 0.009093 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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