2012-04-12 26 views
9

Tôi đọc rằng Dart không hỗ trợ quá tải hàm. Nó có hỗ trợ quá tải cho nhà điều hành không. Nếu có, sẽ tử tế và chỉ cho tôi cách làm một ví dụ đơn giản như thế nào. Và một số lợi thế là gì, tôi mới lập trình. Cảm ơn.Phi tiêu hỗ trợ quá tải toán tử

+0

bạn đã đọc ở đâu * Dart không hỗ trợ quá tải chức năng *? –

Trả lời

14

Có Dart hỗ trợ quá tải toán tử bằng cách sử dụng toán tử theo sau bởi toán tử bạn muốn quá tải. Ví dụ sau quá tải == điều hành cho các đối tượngMyClass:

class MyClass { 
    operator ==(MyClass other) { 
    // compare this to other 
    } 
} 

hầu hết các nhà khai thác Darts built-in có thể bị quá tải với một vài trường hợp ngoại lệ đáng chú ý là toán tử gán = và tài liệu tham khảo tương đương toán tử === (không tồn tại nữa).

Đối với lợi thế là nhà khai thác quá tải nó cho phép bạn sử dụng lại các nhà khai thác có một ý nghĩa ngữ nghĩa nổi tiếng như == hoặc + cho các hoạt động trên các đối tượng của bạn. Ví dụ nếu bạn có một lớp Matrix rằng quá tải toán tử + sau đó bạn có thể thêm hai ma trận bằng cách sử dụng cú pháp m1 + m2 thay vì cồng kềnh hơn m1.plus (m2)

+0

có thể cho tôi biết nếu 'khác' là bất cứ điều gì đặc biệt hoặc nó có thể được đặt tên khác. Giống như == (MyClass ggg) –

+1

@MuhammadUmer khác có thể được đặt tên bất cứ thứ gì, chỉ tên tham số của đối tượng lớp mà bạn so sánh với nghĩa là == khác hoặc this + khác –

+0

Đối số phải là cùng loại hay người ta có thể tạo ra các toán tử như toán tử List cons của Scala ::, trong đó kiểu bên trái là kiểu phần tử để tạo đầu mới, và kiểu bên phải là kiểu List? – pohl

6

Để mở rộng Lars' câu trả lời, bạn cũng có thể khai thác quá tải bằng cú pháp hàm nội tuyến.

class MyClass { 
    operator ==(MyClass o) => id == o.id; 
}