与长布尔表达式相关的IronPython错误?

时间:2011-01-06 22:24:18

标签: ironpython

这里好像有点搞笑。使用IronPython 2.6.2 for .NET 4.0,我得到以下行为。最简单的情况如下:

  1. 我启动了交互式shell
  2. 我输入以下第5行

    False or False or False or False or False or False or \
    
  3. 然后我用以下行结束它

    False or False or False or False or False or False
    
  4. 当我输入此内容时,该过程在一个相当不错的桌面上运行了30分钟,但仍未返回。

    如果我将步骤2减少1,即将该行减少4次,那么它将在大约一两分钟后返回。

    如果我将步骤2减少2,即。有3次线,然后它返回大约一秒左右。

    那么发生了什么,为什么?

    当然,导致我把它隔离开的现实世界的例子要复杂得多,而且看起来并不那么轻浮。

    由于 阿基尔

1 个答案:

答案 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);

解决了这个问题。