这里好像有点搞笑。使用IronPython 2.6.2 for .NET 4.0,我得到以下行为。最简单的情况如下:
我输入以下第5行
False or False or False or False or False or False or \
然后我用以下行结束它
False or False or False or False or False or False
当我输入此内容时,该过程在一个相当不错的桌面上运行了30分钟,但仍未返回。
如果我将步骤2减少1,即将该行减少4次,那么它将在大约一两分钟后返回。
如果我将步骤2减少2,即。有3次线,然后它返回大约一秒左右。
那么发生了什么,为什么?
当然,导致我把它隔离开的现实世界的例子要复杂得多,而且看起来并不那么轻浮。
由于 阿基尔
答案 0 :(得分:1)
我建议在CodePlex上打开一个错误。这里发生的事情是IronPython的OrExpression AST节点试图发现它的类型。为此,它会查看左手类型和右手类型。如果它们是相同的OrExpression将在左侧产生类型的表达式 - 再次检查。第二次调用主要是导致这种增长不成比例的原因。只需更改OrExpression.cs:
return _left.Type == _right.Type ? _left.Type : typeof(object);
为:
Type lType = _left.Type;
return lType == _right.Type ? lType : typeof(object);
解决了这个问题。