可能部分童鞋知道了10.5号的加拿大-中国CG交流会,此次事件的尾声主要围绕=和==是否是同样以及若是不同有什么大不了展开。交流会结束后才知道有不少童鞋对这方面的知识比较欠缺,再次作一下详细说明。服务器
对于不知道此事件的同窗,如下说的是VEX。ide
背景介绍spa
因此a = b = c = 10就好理解了,其顺序为从右往左,b的值为c=10,而这个表达式的值是10,因此b就为10,a依次类推。code
而a==(b=c)和a=(b==c)分别有大相径庭的含义,童鞋们能够本身思考一下。blog
那么问题来了,若是==和=用错了,会致使什么大不了的呢?教程
鉴于Houdini的节点都是非破坏性的程序化操做,每一个节点都是可逆的(大不了删了呗),那可能出现结果怎么着都不对的现象。好比咱们想判断下若是颜色的R值为1就让点沿着法线移动,若是某位看了教程被误导的同窗可能会写出这样的代码:事件
if(@Cd.r=1) @P += @N;
这个结果会是什么呢?hash
答案是,不管@Cd是啥,物体的点都会被移动,并且,颜色的R值全都被修改为了1。class
恐怖的是,这时候Houdini并无报任何错误,按照某位老师的说法,那这个代码就是对的,可是结果又不对,该怎么解释呢? 若是结果是对的,那就是符合Sidefx的理念,若是结果不对代码又是对的,那恐怕是你的代码虽然“对”但不符合Sidefx的理念了吧。变量
看到这里你还会以为只要效果对管他怎么写的都行吗?
让咱们再来看看一种更加通用的状况,,若是我想删除服务器的重复文件,只要这俩的特征值同样就删除第一个文件,按照sidefx的理念咱们会这么写:
int id1 = hash(file1), id2 = hash(file2); // use hash value to determine whether two files are identical if(id1 = id2) deleteFile(file1);