과거를 되돌아보고 새로운 것을 배우면 행복해질 수 있습니다
우선 V8 온라인 매뉴얼(http://izs.me/v8-docs/main.html)을 기억해 주세요.
지난번에 본 Building.gyp 파일을 아직도 기억하시나요?
이렇듯 *.cc 파일이 몇 개 더 있으면 다음과 같습니다.
"소스": [ "addon.cc", "myexample.cc" ]
지난 번에는 두 단계를 분리했습니다. 실제로 구성과 컴파일을 함께 사용할 수 있습니다.
$ node-gyp 구성 빌드
리뷰는 다하셨나요? 없이? !
자, 계속하겠습니다.
목차
함수 매개변수
이제 드디어 매개변수에 대해 이야기해야 합니다.
a와 b를 더하고 결과를 반환하는 add(a, b) 함수가 있다고 가정해 보겠습니다. 먼저 함수 개요를 작성합니다.
<값> 추가(const Arguments& args) 처리
{
HandleScope 범위;
//... 다시 시작합니다!
}
인수
함수의 매개변수입니다. 먼저 v8의 공식 매뉴얼 참고자료를 살펴보겠습니다.
•int 길이() const
•로컬 연산자[](int i) const
나머지는 신경 쓰지 않습니다. 이 두 가지가 중요합니다! 하나는 함수에 전달되는 매개변수의 수를 나타내고, 다른 괄호는 아래 첨자 색인을 통해 n번째 매개변수에 액세스하는 데 사용됩니다.
따라서 args.Length()는 2이고, args[0]은 a를 나타내고 args[1]은 b를 나타내므로 위의 요구 사항을 대략적으로 이해할 수 있습니다. 그리고 우리는 이 두 숫자의 유형이 숫자여야 함을 결정해야 합니다.
대괄호 안의 인덱스 연산자는 Node.js의 모든 유형의 기본 클래스인 Local
•IsArray()
•IsBoolean()
•IsDate()
•IsFunction()
•IsInt32()
•IsNativeError()
•IsNull()
•IsNumber()
•IsRegExp()
•IsString()
•...
하나씩 나열하지는 않겠습니다. 나머지는 문서를 읽어보세요. 。:.゚ヽ(*´∀`)ノ゚.:。
ThrowException
나중에 사용할 기능입니다. 자세한 내용은 v8 설명서에서 확인할 수 있습니다.
이름에서 알 수 있듯이 오류가 발생합니다. 이 문을 실행한 후에는 Node.js 로컬 파일에서 throw() 문을 실행하는 것과 같습니다. 예:
ThrowException(Exception::TypeError(String::New("인수 개수가 잘못됨")));
Node.js를 실행하는 것과 동일합니다.
throw new TypeError("인수 개수가 잘못되었습니다.");
정의되지 않음()
이 기능은 문서에도 있습니다.
구체적으로 말하면 일부 함수는 특정 값을 반환할 필요가 없거나 반환 값이 없기 때문에 null 값입니다. 이때 대신 Undefine()을 사용해야 합니다.
해보자, 사오니안!
위 사항을 이해하고 나면 곧 a b의 논리를 작성할 수 있을 것이라고 믿습니다. Node.js 공식 매뉴얼의 코드를 복사하여 여러분에게 제공하겠습니다.
<값> 추가(const Arguments& args) 처리
{
HandleScope 범위;
// 2개 이상의 매개변수를 전달할 수 있다는 뜻이지만 실제로는 처음 두 개만 사용합니다.
If(args.Length() < 2)
{
// 오류 발생 >
ThrowException(Exception::TypeError(String::New("인수 개수가 잘못됨")));
}
// 처음 두 매개변수 중 하나가 숫자가 아닌 경우
{
// 오류를 발생시키고 null 값을 반환합니다
ThrowException(Exception::TypeError(String::New("잘못된 인수")));
반환 범위.닫기(정의되지 않음());
}
// 자세한 내용은 v8 문서를 참고하세요
http://izs.me/v8-docs/classv8_1_1Value.html#a6eac2b07dced58f1761bbfd53bf0e366
)
// `NumberValue` 함수
로컬
반환 범위.Close(num);
마지막으로 내보내기 기능을 마지막에 적어주시면 괜찮습니다.