rust - 不能使用 NEON JsArray : This function takes 3 parameters but 2 were supplied

标签 rust node.js-addon

我正在学习如何使用 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 boolneon::macro_internal::runtime::raw::Localneon::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/

相关文章:

c++ - 为什么无法识别我的 NAN_METHOD?

c++ - 如何从插件中的单独 C++ 线程调用发射器回调?

rust - Piston 应用程序在几分钟后因内存分配错误而崩溃

rust - 为什么 Serde 不能为仅包含 &Path 的结构派生反序列化?

rust - 如何创建Vec <T>,其中T : Into<_> in Rust?

c++ - 在 Node.js 插件的 void * 中检索和存储 V8 对象

node.js - 无法使用 webpack 加载 Node 原生插件

c++ - 在 NodeJS 插件中将 args 转换为 double

rust - 是否可以专注于静态生命周期?

unix - 在 Rust 中获取准确时间的正确方法?