Trong Ruby, các đối tượng có một phương pháp tiện dụng gọi method_missing
cho phép một để xử lý các cuộc gọi phương pháp cho phương pháp đã thậm chí không được (rõ ràng) định nghĩa:Có tương đương với method_missing của Ruby bằng các ngôn ngữ khác không?
Được triệu gọi bởi Ruby khi obj được gửi một thông điệp nó không thể xử lý. biểu tượng là biểu tượng cho phương thức được gọi, và arg là bất kỳ đối số nào được truyền cho nó. Theo mặc định, thông dịch viên sẽ phát sinh lỗi khi phương thức này được gọi. Tuy nhiên, có thể ghi đè lên phương pháp để cung cấp hành vi năng động hơn. Ví dụ dưới đây tạo ra một lớp Roman, trả lời các phương thức có các tên gồm các chữ số La Mã, trả về các giá trị số nguyên tương ứng.
class Roman
def romanToInt(str)
# ...
end
def method_missing(methId)
str = methId.id2name
romanToInt(str)
end
end
r = Roman.new
r.iv #=> 4
r.xxiii #=> 23
r.mm #=> 2000
Ví dụ, Ruby on Rails sử dụng này để cho phép các cuộc gọi đến các phương pháp như find_by_my_column_name
.
Câu hỏi của tôi là, ngôn ngữ nào khác hỗ trợ tương đương với method_missing
và cách bạn triển khai mã tương đương trong mã của mình?
'roman_to_int' có triển khai trống không, vậy tại sao r.iv trả lại 4? – Tim
@Tim Giả sử bạn điền vào chỗ trống bằng mã sẽ trả về một giá trị. Anh ta quyết định không hiển thị tất cả các chi tiết. Điều này có thể được thực hiện với một số La Mã để chuyển đổi số. –