C++을 사용한 이후로 오랜 시간이 걸렸습니다. 단단한 유형에서 머리를 감 쌌기 때문에 오랜 시간이 걸렸습니다. 난 단순히 v8에서 인수를 얻으려면 하나의 라이너를 작동하거나 인수가 제공되지 않은 경우 기본값을 찾고 있어요.v8 함수에서 기본 인수를 얻는 가장 짧은 방법 (1 라이너)?
v8::String::Utf8Value arg0(args[0]);
v8::String::Utf8Value arg1(args[1]);
v8::String::Utf8Value arg2(args[2]);
const char *username = (args.Length() > 0) ? *arg0 : "";
const char *password = (args.Length() > 1) ? *arg1 : "";
const char *service = (args.Length() > 2) ? *arg2 : "login";
출력 : 불행하게도
func(); // { username: "", password: "", service: "login" } func('1'); // { username: "1", password: "", service: "login" } func('1', '2'); // { username: "1", password: "2", service: "login" } func('a', 'b', 'c'); // { username: "a", password: "b", service: "c" }
는 근접에 이상적인 솔루션 (어떤 아이디어 왜?) 나를 위해 작동하지 않습니다 다음 :
const char *username = (args.Length() > 0) ? *v8::String::Utf8Value(args[0]->ToString()) : "";
const char *password = (args.Length() > 1) ? *v8::String::Utf8Value(args[1]->ToString()) : "";
const char *service = (args.Length() > 2) ? *v8::String::Utf8Value(args[2]->ToString()) : "login";
나는 v8에 대해 많이 모른다는 것을 인정하지만, C++ POV에서 당신의 대체물은 의심 스럽다. arg0/arg1/arg2의 소멸자는 언제 실행합니까? 그 소멸자는 언제 당신의 한줄기에서 달릴 수 있습니까? 클래스의 소멸자가 실행될 때 할당 된 메모리는 어떻게됩니까? – hvd
하하하하 ... 하느님.그래서 afaik (v8의 모든 것들이 메모리 관리에 정적이고 끔찍한 것을 제외하고는 어디에서나 모든 것에 액세스해야하는 JS 엔진이기 때문에) : args *는 함수가 반환되면 파괴 될 수도 있지만 ... 가능합니다. 그 v8은 내부의 "스택 추적"을 위해 데이터에 매달린다. 기본적으로, 나는 명확하게 알지 못한다. 끝나면 코드를 프로파일 링 할 것이다. ;) –
하나의 라이너가 정확히 "가장 깨끗한"솔루션은 아닙니다. –