Tôi đang nhúng V8 làm ngôn ngữ phụ trong chương trình C++.Truyền vs ToXXX để xử lý giá trị trong v8
Tôi lấy một Handle<Value>
từ V8 khi tôi gọi cái gì đó như
Handle<Value> value_handle = context->Global()->Get(key_handle);
sau đó tôi có thể tìm ra rằng nó là (nói) một chuỗi với value_handle->IsString()
. Và nếu có, tôi có thể chuyển đổi nó thành một số Handle<String>
để truy cập các phương thức cụ thể theo chuỗi của nó.
Nhưng có vẻ là hai cách để làm điều đó, một trong hai:
Handle<String> string = value_handle->ToString();
hoặc
Handle<String> string = Handle<String>::Cast(value_handle);
Tuy nhiên, đối Mảng và chức năng, không có toArray()
hoặc toFunction
phương pháp, chỉ là đúc .
Vì vậy, câu hỏi của tôi là: a) là ToXXX
chỉ là cú pháp để đúc? và, nếu không b) phương pháp ToXXX
là gì?
Hmm. Bạn có chắc đây là những gì thực sự xảy ra dưới mui xe? Tôi có một số hành vi lạ mà * đôi khi * gọi ToString() trên một 'Xử lý' kết quả trong một SEGFAULT nếu 'Giá trị' không phải là một String. Lần khác, nó sẽ làm những gì bạn mô tả. –
namuol
@namuol yes Tôi chắc chắn. SEGFAULT có thể được gây ra bởi nhiều lý do khác nhau, từ một lỗi trong mã của bạn đến một lỗi trong mã V8. Thật khó để nói mà không nhìn thấy mã trong câu hỏi. –
Nó chỉ ra rằng 'ToString' thực sự cần phải hoạt động trong một bối cảnh - tôi đã gọi nó mà không cần thiết lập một bối cảnh trên một xử lý dai dẳng. Tôi giải quyết nó bằng cách lưu trữ các cô lập xử lý được tạo ra bên trong với giá trị và tạo ra một bối cảnh từ cô lập trước khi gọi 'ToString'. – namuol