2013-06-05 23 views
5

Tôi muốn truyền các phiên bản của lớp tùy chỉnh A sang int. Cú pháp của toán tử cast ngầm là gì? (Tôi nghĩ rằng tôi nhớ rằng có một tính năng như vậy nhưng tôi không thể tìm thấy nó trên web)Cú pháp cho toán tử đúc ẩn trong phi tiêu là gì?

int a = (new A()); 
+1

Tôi tin rằng cú pháp là "không có cú pháp nào". Nói cách khác - bỏ qua '()' và nó "chỉ nên làm việc". Xem http://news.dartlang.org/2012/05/types-and-casting-in-dart.html. Phải có một giả định rằng một downcast là có thể (và có ý nghĩa). Lớp của bạn là gì 'A'? – Floris

+0

Bạn có thể viết var a = new A(); int b = a; – SpiderPig

+0

Chuyển đổi loại tiềm ẩn khó thực hiện trong ngôn ngữ script. Nhưng chuyển đổi rõ ràng có thể được thực hiện rất dễ dàng. Liên tục trong Dart không tồn tại toán tử chuyển đổi rõ ràng như vậy. Vì vậy, bạn không thể làm điều này trong Dart 'var a = (int) mới A()' bởi vì toán tử chuyển đổi rõ ràng không được triển khai trong Dart. – mezoni

Trả lời

2

Chú thích loại không được phép ảnh hưởng đến hành vi trong Dart. Nếu bạn không chạy trong chế độ kiểm tra, thì đây:

int a = new A(); 

sẽ làm việc giống như này:

var a = new A(); 

tại thời gian chạy. Nói cách khác, khi không ở chế độ được chọn, bạn có thể lưu trữ A của mình trong một biến được chú thích dưới dạng int, nhưng không có chuyển đổi thực tế nào diễn ra.

Nếu bạn đang chạy ở chế độ được chọn, biểu mẫu đầu tiên sẽ cung cấp cho bạn ngoại lệ thời gian chạy.

Tôi không chắc chắn, nhưng tôi nghĩ những gì bạn đang hỏi là một cách để xác định một sự chuyển đổi giữa các lớp học của bạn Aint rằng sẽ xảy ra tự động khi "diễn viên" đến một int. Không có điều gì tồn tại, theo hiểu biết của tôi. Bạn chỉ cần xác định một phương thức để làm như vậy. Ví dụ:

int a = new A().to_i(); 
11

Bạn cũng có thể sử dụng để giúp as nói với các công cụ "không, thực sự, đối xử với đối tượng này như kiểu này".

Một ví dụ điển hình là khi bạn phải đối phó với phi tiêu: chức năng querySelector() của html.

FormElement form = querySelector('#sign-up') as FormElement; 

Ở trên, đối tượng được trả về bởi querySelector('#sign-up') được kiểm tra xem đây thực sự là một thể hiện của FormElement.

Tìm hiểu thêm tại https://www.dartlang.org/docs/dart-up-and-running/ch02.html#operators

Các vấn đề liên quan