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. 怎么说呢,这两者之间还是有区别的,区别其实就相当于C语言里面简单的函数定义你可以用简易的写法一句话就写出来,但是复杂的你就要老老实实的定义参数入口,定义返回,里面定义内部变量,等等。。。这就是区别。功能实现上的区别。而且我感觉varfunc实际上是兼容zmud的function而设置的,#function是新的函数形式,由于cmud有了内部变量,有了更直观的参数定义,有了明教的返回值输出方法,所以使用#function而不是变量定义的形式更 能满足你的要求。#varfunc很难实现非常复杂的语法。 newvar 和var的区别是创建变量的地方,一个是在当前目录下,另一个默认是在根目录,创建的2种变量都是全局变量。好处是按目录创建的比较直观,导出方便
回复 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.
有区别吧,仔细看看例子 回楼上,例子和我的解释并不冲突
例子中调用#newvar的时候,当前目录已经被切换到了NewClass了。
这时系统里存在2个变量
一个是/@a,另一个是/NewClass/@a
让我头疼的是Cmud在引用值的时候,我没办法区别这2个同名a的变量,这时在别处用@a取值,不确定取到的是哪个
简单的说/NewClass下的脚本中(包括触发、别名等等),使用#newvar命令,操作的都是/NewClass中的全局变量
你可以自己写脚本试试 全局变量这块cmud特别混乱,你如果弄同名全局变量很容易出错。
我不认为用#newvar创建全局变量和#var就有什么区别,区别也仅仅
是创建时候的位置区别,真的用的时候估计还是一样糟糕。
发现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解锁才能执行下一步,两个语句互相等待资源,
就导致程序陷入死循环,当然也就完蛋了! 已经更新!欢迎指正!
页:
1
[2]