2016-10-13 11 views
2

私はノードアドオンを書いています。nanライブラリを使ってコードを書くことができます。これは、異なるバージョンのv8とノードと互換性のあるコードを書くことができるため、Nodeプロジェクトで推奨されています。Nanを使ってNode.jsアドオンコードに配列を作成する

しかし、documentationを何度も見てから、nan APIの配列の処理に関するガイダンスは見つかりませんでした。 Javascriptコードで引数として渡された配列を処理する、またはアドオンで新しい配列オブジェクトをインスタンス化してJavascriptコードに返すなどの基本的な作業。 v8::Array APIを直接使用することになっていますか? APIのNan::New部分がこれをよりうまく処理してくれることを願った。

私は何かを見逃しましたか?

+1

[参照先のドキュメント](https://v8docs.nodesource.com/io.js-3.0/d1/d83/classv8_1_1_data.html)を見ると、 'v8:Array'はオブジェクトです。だから、新しい配列を作るために、私はちょうど 'Nan :: New ()'を実行するだけでかなり確実です(Node addonsをしばらく使っていない)。配列の反復については、わかりません。 –

+0

確かに。それはうまくいった。 (v8 :: Arrayを直接使用する場合に必要なように)分離するための参照を必要としないため、コードをより良くします。先端に感謝します。答えとして投稿すると、私はそれを受け入れるでしょう。 – Jayesh

答えて

2

the V8 documentationを見ると、v8::Arrayはサブセットv8::Objectであることがわかります。これを考えると、あなたはより多くの詳細についてはv8::Arrayドキュメントを参照することができ

Nan::New<v8::Array>(); 

を持つ配列を作成することができます。

2

いくつかの関連する問題の解決策を探しています。this repositoryには、いくつかの非常に良い動作例があります。

ここでは、アレイ関連の変換について簡単に説明します。

Local<Array> array = Local<Array>::Cast(args[0]); //args[0] holds the first argument 

for (unsigned int i = 0; i < array->Length(); i++) { 
    if (Nan::Has(array, i).FromJust()) { 
    //assuming the argument is an array of 'double' values, for any other type the following line will be changed to do the conversion 
    double value = Nan::Get(array, i).ToLocalChecked()->NumberValue(); 

    Nan::Set(array, i, Nan::New<Number>(value + 1)); 
    } 
} 

戻り配列:

//Assuming arr is an 'array' of 'double' values 
Local<Array> a = New<v8::Array>(3); 
Nan::Set(a, 0, Nan::New(arr[0])); 
Nan::Set(a, 1, Nan::New(arr[1])); 
Nan::Set(a, 2, Nan::New(arr[2])); 

info.GetReturnValue().Set(a); //here 'info' is 'const Nan::FunctionCallbackInfo<v8::Value>& info' received in Nan Method defintion parameter 

具体的な解決策がhereを見つけることができます

は、引数の配列を受信します。

関連する問題