我正在学习如何使用 NEON ,但我什么都不懂。如果我尝试执行此代码:
#[macro_use]
extern crate neon;
use neon::vm::{Call, JsResult};
use neon::mem::Handle;
use neon::js::{JsInteger, JsNumber, JsString, JsObject, JsArray, JsValue, Object, Key};
use neon::js::error::{JsError, Kind};
fn test(call: Call) -> JsResult<JsArray> {
let scope = call.scope;
let js_arr: Handle<JsArray> = try!(try!(call.arguments.require(scope, 1)).check::<JsArray>());
js_arr.set(0, JsNumber::new(scope, 1000));
Ok(js_arr)
}
register_module!(m, {
m.export("test", test)
});
我在调用 js_arr.set
时遇到此错误:此函数需要 3 个参数,但提供了 2 个参数。
我不明白为什么,因为它是一个 JsArray
。甚至 Racer 告诉我 set 方法有 2 个参数。无论如何,js_arr.set
按以下顺序接受 3 个参数:&mut bool
、neon::macro_internal::runtime::raw::Local
和 neon::macro_internal::runtime::raw::Local
。
这是怎么回事?我不明白 JsArray
是如何工作的。
最佳答案
作为paulsevere says on a GitHub issue for Neon , 导入 neon::js::Object
。另外,不要不导入Key
,它也提供了一个set
方法:
#[macro_use]
extern crate neon;
use neon::vm::{Call, JsResult};
use neon::js::{Object, JsArray, JsInteger, JsObject, JsNumber};
fn make_an_array(call: Call) -> JsResult<JsArray> {
let scope = call.scope; // the current scope for rooting handles
let array = JsArray::new(scope, 3);
array.set(0, JsInteger::new(scope, 9000))?;
array.set(1, JsObject::new(scope))?;
array.set(2, JsNumber::new(scope, 3.14159))?;
Ok(array)
}
register_module!(m, {
m.export("main", make_an_array)
});
这将创建一个全新的数组。如果你想接受一个数组作为函数的第一个参数然后修改它,这是可行的:
#[macro_use]
extern crate neon;
use neon::vm::{Call, JsResult};
use neon::js::{Object, JsArray, JsInteger, JsUndefined};
use neon::mem::Handle;
fn hello(call: Call) -> JsResult<JsUndefined> {
let scope = call.scope;
let js_arr: Handle<JsArray> = call.arguments.require(scope, 0)?.check::<JsArray>()?;
js_arr.set(0, JsInteger::new(scope, 1000))?;
Ok(JsUndefined::new())
}
register_module!(m, {
m.export("hello", hello)
});
关于rust - 不能使用 NEON JsArray : This function takes 3 parameters but 2 were supplied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521530/