如何在 V8 中对整数进行字符串化?

How to stringify an Integer in V8?

我正在尝试将 v8 中的整数字符串化。

到目前为止,我离成功最近的一次是使用 String::Concat。我尝试编写此方法(在 node.js 9.11.1 原生插件中),但它无法编译。

void Method(const FunctionCallbackInfo<Value> &args) {
  Isolate *isolate = args.GetIsolate();

  const int num = 42;
  args.GetReturnValue().Set(
      String::Concat(String::NewFromUtf8(isolate, "The num is: "),
                      Integer::New(isolate, num)));
}

编译错误为:

'=': cannot convert from 'v8::Integer *' to 'v8::String *volatile '

我一直没能弄清楚 v8 API 的正确部分可以用来将整数格式化为字符串。我(可能很明显)不熟悉 v8 API,而且我很难找到好的例子来学习。

我一直在回答这个问题:How to convert an Integer to a String in V8? 尽管与现代 v8 API 相比它显得陈旧。例如,该示例似乎是 "isolate" 之前的

我的印象是 Concat 会接受这个,因为在 JavaScript 中它只是将 int 强制转换为字符串(这似乎是我引用的那个问题的要点)。但我想也许我在使用 v8 编码时必须明确说明这一点?

我确定我缺少的是一些简单的东西。如果有人提出更好的方法,我将不胜感激。

尝试在您刚刚创建的 Integer 上调用 ToString

在此处查看函数声明:https://chromium.googlesource.com/v8/v8/+/6.5.254.41/include/v8.h#2333

魔法 "JavaScript just coerces the int" 必须在某处实现——即在 C++ 端,所有此类转换都是手动完成的 ;-)