我正在查看as3delaunay库,大部分代码对我来说很清楚.但是,这部分不是(请注意我在前面加上箭头的行):
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;
}
Run Code Online (Sandbox Code Playgroud)
作为参考,isPartOfConvexHull()在发现Edge.as,看起来像这样:
internal function isPartOfConvexHull():Boolean
{
return (_leftVertex == null || _rightVertex == null);
}
Run Code Online (Sandbox Code Playgroud)
怎么!nearestEdge.isPartOfConvexHull()办?这是否意味着从调用返回的radius = nearestEdge.sitesDistance() * 0.5唯一执行if ?这是否会停止执行任何其他代码?falseisPartOfConvexHull()
它相当于:
if (!nearestEdge.isPartOfConvexHull()) {
radius = nearestEdge.sitesDistance() * 0.5;
}
Run Code Online (Sandbox Code Playgroud)
在以下行中:
var b:Boolean = expression1 && expression2;
Run Code Online (Sandbox Code Playgroud)
expression2将不进行评估,如果expression1是false因为我们已经知道了最终结果:b = false.
现在在以下行中:
expression1 && expression2;
Run Code Online (Sandbox Code Playgroud)
除了我们没有将结果分配给变量这一事实外,会发生同样的事情.
这就是你要问!nearestEdge.isPartOfConvexHull()的第一个表达式在哪里(radius = nearestEdge.sitesDistance() * 0.5),第二个表达式.