很多发现计算值每次不恒定的情况,请先检查你的变量是否干净

很多发现计算值每次不恒定的情况,请先检查你的变量是否干净

最近若干群友在大群里反馈,说他同一片数据,同样的计算操作,有时得出A值,有时得出B值。问是不是DDB的计算有bug?


一看代码,好多他们的脚本在文件的开头,没有执行清理变量和缓存的动作,那这样完全就没有办法保证中间变量的值。


编程里面有个很重要的概念,叫“可重入”和“不可重入”。

就是说,如果你的一段代码,每次走到这同一个地方,呈现的是不一样的行为,或者得到不一样的值,那就是“不可重入”。如果代码每次走到这个地方,变量值是固定的,变量空间没有污染,这就是“可重入”。

类成员函数,因为要使用类里面的成员变量来记录实例的状态,函数返回什么样的值取决于该实例的状态,所以类成员函数通常都是不重入的。


只要不是类成员的普通函数,都应该是“可重入的”。


DDB目前(指当下的版本2.00.5和1.30.17)暂不支持类,所以在DDB的每个启动脚本的开头,都应该清除之前变量和定义的值。保证后面的业务代码每次走到同一个地方,得到同样的值。


脚本开头的清理代码(本段代码不涉及共享表和流处理相关变量,涉及流处理的情况,另文解说):

login("admin","******");//这里根据你的服务器配置来填写

clearAllCache();//清理之前的缓存

undef(all);//注销之前的变量

go;//必须执行go,脚本才会立即执行以上动作,保证下游的变量空间干净


另外,如果你连接的这个DDB节点,目前有其他job或者用户正在运行,你的清理动作会把其他人和job的变量清除掉,执行前请确认没有其他人在运行。

  • 发表于 2022-04-05 12:06
  • 阅读 ( 3025 )
  • 分类:编程语言

0 条评论

请先 登录 后评论
陈枢之
陈枢之

工程师

1 篇文章

作家榜 »

  1. Junxi 73 文章
  2. liang.lin 5 文章
  3. mhxiang 4 文章
  4. wfHuang 3 文章
  5. admin 3 文章
  6. alex 2 文章
  7. 丘坤威 1 文章
  8. 陈枢之 1 文章