Meskipun itu dijelaskan dalam index.d.ts
penggunaannya menghasilkan kesalahan " ERROR TS2304: Cannot find name 'call_indirect'
" selama kompilasi. Hal yang sama berlaku untuk call_direct
.
Sepertinya mereka dihapus di sini - https://github.com/AssemblyScript/assemblyscript/pull/974 . Apakah ada/akan ada penggantinya? Dalam kasus saya, saya perlu mengaitkan panggilan balik yang disediakan dari sisi JS dengan kelas wasm. Rencana saya adalah meneruskan tabel ke modul wasm (menggunakan flag --importTable
) dan kemudian menyebutnya menggunakan sesuatu seperti call_indirect( this.callbackId )
Setelah beberapa pertimbangan, saya menemukan 2 kemungkinan solusi:
1) Pertahankan tabel panggilan balik di JS (hanya array panggilan balik) dan berikan metode invokeCallback(callbackId: i32): void
ke modul wasm.
2) Tambahkan opsi --tableBase
ke kompiler, sehingga pengguna dapat memesan beberapa ruang di tabel khusus untuk panggilan balik. Mungkin berhasil, tetapi mungkin akan memperumit hal-hal di sisi kompiler.
Bagaimanapun, jangan ragu untuk menutup masalah ini. Satu-satunya hal adalah call_indirect
dan call_direct
harus dihapus dari index.d.ts
jika tidak ditambahkan kembali ke fitur
Ya, ini telah dihapus karena masalah yang diharapkan dengan implementasi penutupan. Tetapi seseorang masih dapat melakukan ini:
changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);
masing-masing
var tableIndex = changetype<usize>(someFunction);
diperbaiki di #1017
Komentar yang paling membantu
Ya, ini telah dihapus karena masalah yang diharapkan dengan implementasi penutupan. Tetapi seseorang masih dapat melakukan ini:
masing-masing