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 宏非常棘手。
循环
//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 宏非常棘手。