v8中MaybeLocal的意义是什么?

问题描述 投票:0回答:1

这里有人知道为什么v8 API中的许多函数返回MaybeLocal句柄而不是简单的Local类型吗?

我知道调用可能会失败,但是Local类型已经有一种IsEmpty()方法,无论如何都可以很容易地查询它,并且是否已经在使用它们之前严格测试了Local类型是否为空。是由旧API中的任何v8 API函数返回的,那么新API中的MaybeLocal似乎是多余的。缺少坚持过时且不再受支持的v8 API版本,似乎别无选择,只能跳过使用MaybeLocal的麻烦。

[我只是想知道它的基本原理,特别是因为正如我所说,您已经可以测试Local来确定它是否为空,尤其是因为尝试转换为空的MaybeLocalLocal的位置将彻底使应用程序崩溃。

embedded-v8
1个回答
0
投票

我不能说旧的API设计,但是我可以谈论一下当前的API设计。

MaybeLocal<T>用于API取决于未决异常的状态。特别地,不变量try_catch.HasCaught() == maybe_result.IsEmpty()应该为true。

不依赖于异常状态的API使用Local<T>,并且可能仍返回空值。例如,UnboundScript::GetScriptName()可能返回空的Local<String>,但这与未决异常无关。由于没有给脚本命名,它将为空。

© www.soinside.com 2019 - 2024. All rights reserved.