我有这个:
if (!args[2]->IsString() || (*args[2]->ToString() != "true" && *args[2]->ToString() != "false")) {
Nan::ThrowTypeError("Third argument to 'replace-line' must be a string representing whether to find or replace.");
return;
}
但是我收到了编译错误和警告:
../hello.cpp:49:58: error: comparison between distinct pointer types ‘v8::String*’ and ‘const char*’ lacks a cast [-fpermissive]
../hello.cpp:49:92: warning: comparison with string literal results in unspecified behaviour [-Waddress]
if (!args[2]->IsString() || (*args[2]->ToString() != "true" && *args[2]->ToString() != "false")) {
如何正确地将v8字符串与普通C字符串进行比较?
答案 0 :(得分:0)
您可以使用v8::String::NewFromOneByte
详细in the documentation进行转换。如果您愿意,还可以使用其他来源。
如果你想走另一条路,看起来你必须创建自己的缓冲区并使用WriteOneByte
。
答案 1 :(得分:0)
您可以构建v8::String::Utf8Value之类SLS=figure();
hold on
subplot(3,2,1);
plot(t,u{1},t,u{2},t,u{3},t,u{4},t,u{5},t,u{6});
title('SLS Levels');
subplot(3,2,2);
plot(t,log_u{1},t,log_u{2},t,log_u{3},t,log_u{4},t,log_u{5},t,log_u{6});
title('SLS Logarithms');
subplot(3,2,3);
plot(t,I_u{1},t,I_u{2},t,I_u{3},t,I_u{4},t,I_u{5},t,I_u{6});
title('SLS Levels with Intercept');
subplot(3,2,4);
plot(t,log_I_u{1},t,log_I_u{2},t,log_I_u{3},t,log_I_u{4},t,log_I_u{5},t,log_I_u{6});
title('SLS Log. with Intercept');
subplot(3,2,5.5);
legend('GDP', 'C', 'I', 'G', 'Imp.', 'Exp.');
axis off
并将其与C字符串文字进行比较(事件虽然使用v8::String::Utf8Value arg(args[2]->ToString())
代替strcmp/strncmp
,但可以构建==
它)。
答案 2 :(得分:0)
你如何正确地比较Javascript中的两个字符串?
"String 1" === "String 2"
你如何正确地比较Javascript中的两个值?
value1 === value2
===
的魔力在C ++中也可用不要提取内部字符值进行比较。
比较(===
)v8::Value
s。
假设args[2]
是v8::Local<v8::Value>
而不是空句柄,您可以这样做:
Isolate *isolate = Isolate::GetCurrent();
v8::Local<v8::String> h_true = v8::String::NewFromUtf8(isolate, "true");
v8::Local<v8::String> h_false = v8::String::NewFromUtf8(isolate, "false");
if(args[2]->StrictEquals(h_true) || args[2]->StrictEquals(h_false) == false)
{
v8::Local<v8::String> h_error_message = v8::String::NewFromUtf8(
isolate,
"The argument must be a \"true\" or a \"false\"."
);
v8::Local<v8::Error> h_error = v8::Exception::RangeError(h_error_message);
isolate->ThrowException(h_error);
return;
}
但是,由于你正在使用 Nan ,事情可以简单得多:
if(info[2]->StrictEquals(Nan::New("true")) // arguments[2] === "true"
|| info[2]->StrictEquals(Nan::New("false")) // arguments[2] === "false"
== false)
{
Nan::ThrowRangeError("The argument must be a \"true\" or a \"false\".");
return;
}
您甚至不必检查参数是否为字符串,也不是由调用者提供。