Cast vs ToXXX für Werthandles in v8

8

Ich verbinde V8 als Hilfssprache in einem C ++ Programm.

Ich erhalte ein Handle<Value> von V8, wenn ich etwas wie

rufe %Vor%

Ich kann dann herausfinden, dass es sich um eine Zeichenfolge mit value_handle->IsString() handelt. Und wenn ja, kann ich es in ein Handle<String> konvertieren, um auf seine stringspezifischen Methoden zuzugreifen.

Aber es scheint zwei Möglichkeiten zu geben:

%Vor%

oder

%Vor%

Für Arrays und Funktionen gibt es jedoch keine toArray() oder toFunction Methoden, nur das Casting.

Also meine Frage ist: a) Sind die ToXXX nur syntaktischer Zucker zum Gießen? und, wenn nicht b) Was macht die Methode ToXXX ?

    
Ian 22.02.2013, 04:54
quelle

2 Antworten

8

ToXXX Funktionen führen Typumwandlungen durch, wie in den Unterabschnitten von Abschnitt 9 von ECMA-262 5th beschrieben. Zum Beispiel wird ToString in Abschnitt 9.8 beschrieben: Wenn ein Wert ohne Zeichenfolge angegeben wird, wird eine entsprechende Zeichenfolge zurückgegeben Darstellung davon, wenn Sie ein Objekt übergeben, ruft es toString method auf (oder valueOf , wenn toString nicht vorhanden ist). Relevanter Code für ToString : in api.cc Value::ToString , die in runtime.js ToString

Auf der anderen Seite macht Handle<XXX>::Cast(...) keine Zwänge. Es ist nur eine Art Besetzung für Griffe. Im Wesentlichen ist es nur ein static_cast<XXX*> . Im Debug-Modus ist Handle<T>::Cast(...) aktiviert und bricht die Ausführung ab, wenn die Typen nicht übereinstimmen. Es wäre ein fataler Fehler, wenn Sie ein Handle<Value> mit einem Object erhalten und es in ein Handle<String> umwandeln möchten. Im Freigabemodus führt die Umwandlung in einen inkompatiblen Typ später zu seltsamen Ergebnissen und möglicherweise zu Abstürzen, wenn Sie versuchen, das Ergebnis der Besetzung zu verwenden. Relevanter Code in v8.h Handle<T>::Cast delegiert an (zum Beispiel) String::Cast , das die Besetzung überprüft (sofern die Prüfungen aktiviert sind) über String::CheckCast .

    
Vyacheslav Egorov 22.02.2013, 09:40
quelle
0

Wir können

finden
  

V8EXPORT Local ToString () const;

in Zeile 971 von v8.h Wobei V8EXPORT ein Betriebssystemabhängiger Ansatz für Funktionen ist.

ToString von Handle von String befindet sich in Zeile 2362 von api.cc

%Vor%

Aus Gründen der Konsistenz und der Vorteile eines weiteren Upgrades von V8-Versionen empfehle ich dringend toString () anstelle der primitiven Besetzung.

    
Abby Chau Yu Hoi 22.02.2013 06:08
quelle

Tags und Links