lee*_*lee 5 c++ v8 node.js node.js-addon
我目前正在寻找带有 node-gyp 的 C++ 附加组件。
node-gyp configure工作正常,但node-gyp build给出了一个错误
error C2661: 'v8::Value::ToNumber': no overloaded function take 0 parameter。
有一些关于已弃用的警告,它们提供了一个链接到 v8.h 文件(在 node-gyp 中)的声明。但是,关于ToNumber 的只有V8_DEPRECATED 和V8_WARN_UNUSED_RESULT。因此,似乎由于缺少关于v8::Value::ToNumberin的定义而导致错误v8.h。
错误发生在下面的最后一行代码:
void someFunction(const FunctionCallbackInfo<Value>& args) {
Isolate *iso = args.GetIsolate();
if (args.Length() < 1) {
iso->ThrowException(Exception::TypeError(String::NewFromUtf8(iso, "Must provide Input")));
}
Local<Object> coords = args[0]->ToObject()->Clone(); // note that the keys are available with coords->GetOwnPropertyNames();
Local<Array> keys = coords->GetOwnPropertyNames();
if (keys->Length() != 2) {
iso->ThrowException(Exception::TypeError(String::NewFromUtf8(iso, "Need exactly 2 values")));
}
char props[2];
double values[2];
for (int i=0; i < 2; i++) {
String::Utf8Value key(keys->Get(i)->ToString());
props[i] = (*key)[0];
values[i] = coords->Get(keys->Get(i))->ToNumber()->Value();
}
...
Run Code Online (Sandbox Code Playgroud)
我试图阅读 nodejs 文档,但似乎没有关于删除ToNumber. 还寻找了相关的问题,但没有与我的匹配:(
也许它与我的节点版本有关,但是在使用节点版本进行测试之前,我需要一些问题的答案..
我正在使用节点:10.16.3npm: 6.9.0node-gyp:5.0.3
感谢您的阅读。任何帮助表示赞赏!
V8 开发人员在这里。你找不到删除的证据,ToNumber因为它没有被删除;-)
只是之前已经弃用了一段时间的函数的无参数版本终于被舍弃了。替换是将 aLocal<Context>作为参数的版本,请参见此处:https : //github.com/nodejs/node/blob/v10.16.3/deps/v8/include/v8.h#L2425
技术背景是ToNumber最终可以执行 JavaScript(例如,如果它是通过valueOf方法在对象上调用的),并且执行 JavaScript 是特定于上下文的。使用的上下文ToNumber曾经是隐式的,这很难推理,有时会导致嵌入器方面的细微错误;所以 V8 的“新”(过去几年)API 理念是明确上下文参数。您的嵌入应用程序越复杂,您(希望)就越会欣赏代码的更明显结构。
ToString是在同一条船上,顺便说一句。在这种情况下,无参数版本仍然存在,但已弃用;替代品是ToString(Local<Context> context).
| 归档时间: |
|
| 查看次数: |
2390 次 |
| 最近记录: |