2017-11-04 10 views
1

私はNanを使ってnodejs addonsで作業を開始しています。MaybeLocalについて読んでいます。「空のMaybeLocal」はどういう意味ですか?

「APIメソッドがMaybeLocal <を返す場合、APIメソッドは例外がスローされるか、または例外が保留されているために失敗する可能性があります。たとえば、以前のAPI呼び出しで例外がスローされたため、まだ捕捉されていないか、TerminateExecution例外がスローされたためです。その場合は空のMaybeLocalが返されます。

これはおおよそヌルポインタを返すのと同じですが、それを検出できる単純なクラスがありますか?

答えて

2

(ここではV8デベロッパー)はい、「空のMaybeLocal」は本質的にnullptrの可能性のあるポインタであり、コードでそのケースを確認するように強制します。

バックグラウンドは、JavaScriptの性質上、V8のAPI操作の多くが(幾分予期せず)失敗する可能性があります。JavaScriptが実行されるたびに、そのJavaScriptコードが例外をスローする可能性があります。オブジェクトプロパティを読み込んでもゲッターが呼び出される可能性があります。 V8のAPIは、多くの場合、MaybeLocalに基づいており、nullptrのチェックが必要なすべての場所や、.IsEmpty()のチェックが必要なすべての場所を見つけるのに役立ちます。世界のMaybeLocalで呼び出されました。

MaybeLocalが空でないことが保証できる場合は.ToLocalChecked()を使用できます。MaybeLocalが空の場合はクラッシュします。それ以外の場合は、共通パターンは

Local<Value> value; 
if (maybe_value.ToLocal(&value)) { 
    // Do stuff with {value}. 
} else { 
    // Handle error. If you have a TryCatch, it should 
    // have caught an exception. 
} 
+0

です。私はそれが取得するのが最も難しいことを知っています。読めるコードはたくさんありますが、「これがなぜこのように行われたのか」はあまりありません。 – bmacnaughton

関連する問題