ImageJ 宏 (Rhino) 中的奇怪 Javascript 循环行为

Strange Javascript loop behavior in ImageJ macro (Rhino)

循环

   //imageRows = 6;
    print("imageRows: " + imageRows);
    for (var gridY = 1 ; gridY < imageRows + 1 ; gridY++)
    {
        print("imageRows: " + imageRows + " gridY: " + gridY + " gridY < imageRows + 1: " + (gridY < imageRows + 1));
    } 

给出输出

imageRows: 6
imageRows: 6 gridY: 1 gridY < imageRows + 1: true
imageRows: 6 gridY: 2 gridY < imageRows + 1: true
imageRows: 6 gridY: 3 gridY < imageRows + 1: true
imageRows: 6 gridY: 4 gridY < imageRows + 1: true
imageRows: 6 gridY: 5 gridY < imageRows + 1: true
imageRows: 6 gridY: 6 gridY < imageRows + 1: true
imageRows: 6 gridY: 7 gridY < imageRows + 1: true
imageRows: 6 gridY: 8 gridY < imageRows + 1: true
imageRows: 6 gridY: 9 gridY < imageRows + 1: true
    .....
imageRows: 6 gridY: 59 gridY < imageRows + 1: true
imageRows: 6 gridY: 60 gridY < imageRows + 1: true

但是,取消注释 imageRows = 6;

    imageRows = 6;
    print("imageRows: " + imageRows);
    for (var gridY = 1 ; gridY < imageRows + 1 ; gridY++)
    {
        print("imageRows: " + imageRows + " gridY: " + gridY + " gridY < imageRows + 1: " + (gridY < imageRows + 1));
    }

给出预期:

imageRows: 6
imageRows: 6 gridY: 1 gridY < imageRows + 1: true
imageRows: 6 gridY: 2 gridY < imageRows + 1: true
imageRows: 6 gridY: 3 gridY < imageRows + 1: true
imageRows: 6 gridY: 4 gridY < imageRows + 1: true
imageRows: 6 gridY: 5 gridY < imageRows + 1: true
imageRows: 6 gridY: 6 gridY < imageRows + 1: true

ImageJ 使用 Rhino 引擎来 运行 Javascript 宏。

注意:上面的循环嵌套在另一个循环中。但是出于调试目的,我注释掉了外循环中的所有其他行。

编辑: 对于它的价值,我将外循环的其余部分排除在外:

numImages = 1;
for (var imageNumber = 1 ; imageNumber < numImages + 1 ; imageNumber++)
{

    imageRows = 6;
    print("imageRows: " + imageRows);
    for (var gridY = 1 ; gridY < imageRows + 1 ; gridY++)
    {
        print("imageRows: " + imageRows + " gridY: " + gridY + " gridY < imageRows + 1: " + (gridY < imageRows + 1));
    } 

} 

和完全相同的行为。

Steven Lacks 带领我走向了正确的方向。 imageRows 确实不是有效数字。我正在从文件中读取它:

importClass(Packages.ij.IJ);
....
var gridConfigurationRawData = IJ.openAsString(folder + IMAGE_GRID_CONFIGURATION_FILENAME); 
var arrayOfData = gridConfigurationRawData.split("\n");
....
var imageRows = dataLine[1];

当我检查类型时:

print("typeof imageRows: " + (typeof imageRows));

我得到了object

当我改为:

var imageRows = parseInt(dataLine[1]);

成功了。

在 ImageJ 中编写 Javascript 宏非常棘手。