2008-09-18 26 views
7

Trong Ruby, giống như trong nhiều ngôn ngữ lập trình OO khác, các toán tử có thể quá tải. Tuy nhiên, chỉ một số toán tử ký tự nhất định mới có thể bị quá tải.Tại sao Ruby chỉ cho phép một số nhà khai thác quá tải

Danh sách này có thể không đầy đủ nhưng, đây là một số các nhà khai thác mà không thể bị quá tải:

!, not, &&, and, ||, or 

Trả lời

11

Phương pháp là overloadable, đó là một phần của cú pháp ngôn ngữ.

+1

Như Jorg đã đề cập trong câu trả lời của mình, '!' Có thể bị ghi đè. –

12

Yep. Các nhà khai thác không phải là quá tải. Chỉ có phương pháp.

Một số nhà khai thác không thực sự. Chúng là đường cho các phương pháp. Vì vậy, 5 + 5 thực sự là 5.+(5)foo[bar] = baz thực sự là foo.[]=(bar, baz).

1

Và chúng ta không quên về << ví dụ:

string = "test" 
string << "ing" 

cũng giống như cách gọi:

string.<<("ing") 
6

Trong Ruby 1.9, các nhà điều hành ! là thực sự cũng là một phương pháp và có thể được ghi đè. Điều này chỉ để lại &&|| và các đối tác ưu tiên thấp của chúng andor.

Ngoài ra còn có một số "toán tử kết hợp" khác không thể được ghi đè lên, ví dụ: a != b thực sự là !(a == b)a += b thực sự là a = a+b.

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