Type/to search
0
Follow
0
Followers
На каком временном этапе основываются данные, полученные путем вызова API при бэктестинге?
Help
Created 2017-10-31 18:38:15  Updated 2017-10-31 18:48:57
 5
 1970

Можно проще объяснить, на каком этапе времени были основаны данные GetTicker и GetRecords?
Например, когда мы сталкиваемся с очень странной проблемой, вот этот код:
function main() {
 while (true) {
  var records = exchange.GetRecords();
  records.pop();
  Log(records.length);
  Sleep(60000);
 }
}
Окончательная длина выходной записи всегда равна 0:
img

Однако, если в комментариях не упомянуть "pop" (), то можно будет сказать:
function main() {
 while (true) {
  var records = exchange.GetRecords();
  //records.pop();
  Log(records.length);
  Sleep(60000);
 }
}
В конце концов, результат был нормальным:
img

Если нет цикла "while", то нет никаких проблем с сохранением вызова "pop" ():
function main() {
 var records = exchange.GetRecords();
 records.pop();
 Log(records.length);
 Sleep(60000);
}
img

Как бы вы ответили?

Related Recommendations
Comment
All comments (5)

    GetRecords返回的数组, 其实是低层维护的同一个变量, 所以不能直接更改.

    9 years ago

    原来如此。建议在API文档里说明一下,防止误操作。

    9 years ago

    可能是js语言的特性导致的?我用slice()拷贝一次就没事了,不明白为什么……

    9 years ago

    用这个 深拷贝函数试下, 每次 获取到的 records 深拷贝一下, 然后就可以随意修改 复制后的 变量了。

    var cloneObj = function(obj) { // 深拷贝 对象函数 var str, newobj = obj.constructor === Array ? [] : {}; if (typeof obj !== 'object') { return; } else if (JSON) { str = JSON.stringify(obj); //系列化对象 newobj = JSON.parse(str); //还原 } else { for (var i in obj) { newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; };
    9 years ago

    slice() 这个是 彻底的复制 , 并不是引用。引用的操作 其实是 同一个 变量,修改了 下次获取 就会有影响。

    9 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)