Как распечатать длину массива в AssemblyScript / Near?
Я экспериментирую с простыми скриптами сборки на ближнем и не могу найти способ распечатать длину массива. Вот самая маленькая репродукция:
let a = new Array<string>();
logging.log(a.length.toString());
Не компилируется с
ERROR TS2339: Property 'toString' does not exist on type 'i32'.
logging.log(a.length.toString());
~~~~~~~~
in assembly/main.ts(171,23)
Пока toString()
явно существует на i32
, например, следующий фрагмент компилируется и работает:
let a: i32 = 5;
logging.log(a.toString());
1 ответ
Решение
Проблема в том, что преобразователь типа Assemblyscript не может разрешать определенные типы выражений, но эта проблема была исправлена здесь https://github.com/AssemblyScript/assemblyscript/pull/726 в восходящем сценарии сборки. Мы исправим это для смарт-контрактов при обновлении компилятора. На данный момент обходным путем является использование временной переменной:
let a = new Array<string>();
let l = a.length;
logging.log(l.toString());