Cách cơ bản để mở rộng một lớp hiện có, là để tăng thêm nó:
use MONKEY-TYPING;
augment class Int {
method day() { "day" }
}
say 42.day
Từ đó bạn có thể có phương pháp "ngày" tạo ra một đối tượng mà có thể xử lý "trước" và " from_now "phương pháp.
Xin lưu ý rằng, có vẻ như bạn sẽ cần suy nghĩ một chút về API của mình: trong dòng đầu tiên, ngày thứ 1. xuất hiện để đề cập đến ngày hôm nay, trong khi dòng thứ hai chỉ "from_now" dường như có chức năng đó .
Xin lưu ý rằng tại thời điểm này, các lớp con không biết về các siêu lớp đang được tăng cường: đây là sự cố đã biết. Cách duy nhất xung quanh rằng tại thời điểm này là để tái soạn lớp con bạn cần sau khi làm tăng lớp cha của họ:
use MONKEY-TYPING;
augment class Cool { # Int is a subclass of Cool
method day() { "day" }
}
BEGIN Int.^compose; # make sure Int knows about ".day"
say 42.day
Nguồn
2017-03-14 08:42:51
Bạn đã thử những gì cho đến nay? – canadiancreed