我正在查看as3delaunay library大部分代码对我来说都是清楚的。然而,这部分不是(注意我前面加了箭头的行):
public function circles():Vector.<Circle>
{
var circles:Vector.<Circle> = new Vector.<Circle>();
for each (var site:Site in _sites)
{
var radius:Number = 0;
var nearestEdge:Edge = site.nearestEdge();
=======>> !nearestEdge.isPartOfConvexHull() && (radius = nearestEdge.sitesDistance() * 0.5);
circles.push(new Circle(site.x, site.y, radius));
}
return circles;
}
作为引用,isPartOfConvexHull()
位于 Edge.as
中,如下所示:
internal function isPartOfConvexHull():Boolean
{
return (_leftVertex == null || _rightVertex == null);
}
!nearestEdge.isPartOfConvexHull()
的作用是什么?这是否意味着只有在调用 isPartOfConvexHull()
返回 false
时,radius = nextEdge.sitesDistance() * 0.5
才会执行?这会停止执行任何其他代码吗?
最佳答案
它相当于:
if (!nearestEdge.isPartOfConvexHull()) {
radius = nearestEdge.sitesDistance() * 0.5;
}
<小时/>
在以下行中:
var b:Boolean = expression1 && expression2;
如果 expression1
为 false
,则不会计算 expression2
,因为我们已经知道最终结果:b = false
.
现在在下面一行:
expression1 && expression2;
除了我们没有将结果分配给变量之外,还会发生同样的事情。
这正是您询问的行中发生的情况,其中 !nearestEdge.isPartOfConvexHull()
是第一个表达式,(radius = nearestEdge.sitesDistance() * 0.5)
是第二个表达式。
关于actionscript-3 - 这行 Actionscript 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779961/