2

由于无法修改变量,因此计数器等由 IDataHolder 数组实现,其中计数器通过将值与前一个值相加来获取值,然后在前进到下一个位置之前将其存储在当前位置。这种机制在以下扫描脚本中部分中断,其中读取变量似乎会更改其值,我想了解原因:

# Sum Test

# Build sum starting at the left end
def sum;
if (BarNumber() < 5) {
    if (BarNumber() == 1) {
        sum = 1;
    } else {
        sum = sum[1] + 1;
    }
} else {
    sum = sum[1]; # This causes the problem.
    #sum = Double.NaN;# alternative: does not change previous value but useless.
}

# Test that the first sum entry is 1 as expected
plot scan = GetValue(sum, BarNumber() -1) == 1;
4

1 回答 1

1

这是一个错误,是当前 thinkScript 版本中的一个缺陷。引用历史数据,即读取它会覆盖问题中描述的常见情况下的历史数据,导致数据损坏,数据丢失。值得注意的是,在强大但有限的 thinkScript 系统中,可以使用问题中的简单语句来检查var包含历史数据的 IDataHolder 数组中具有固定偏移量的单元格:

input offset = 0;
plot scan = GetValue(var, BarNumber() -1 + offset);
于 2019-04-27T19:36:55.500 回答