Tôi có một lớp mà tôi muốn so sánh với cả chuỗi và ký hiệu trong trường hợp, vì vậy tôi nghĩ rằng tôi chỉ ghi đè phương thức ===() cho lớp của tôi và tất cả sẽ là vàng. Tuy nhiên phương thức ===() của tôi không bao giờ được gọi trong câu lệnh case. Ý tưởng nào?Làm thế nào để bạn ghi đè lên toán tử bình đẳng trường hợp ruby? (===)
Dưới đây là một số mã ví dụ, và những gì xảy ra trong một phiên IRB:
class A
def initialize(x)
@x=x #note this isn't even required for this example
end
def ===(other)
puts "in ==="
return true
end
end
IRB (chính): 010: 0> a = A.new ("hi")
=> #
IRB (chính): 011: 0> trường hợp
IRB (chính): 012: 1> khi "hi", sau đó 1
IRB (chính): 013: 1> khác 2
IRB (chính) : 014: 1> kết thúc
=> 2
(nó không bao giờ in thông điệp và phải luôn luôn trả về true anyway) Lưu ý rằng lý tưởng tôi muốn làm một
def ===(other)
#puts "in ==="
return @x.===(other)
end
Cảm ơn trước.
mát. Điều đó giải thích nó, và nó hoạt động! Cách này để làm các tuyên bố trường hợp có vẻ phản trực giác? – Marcin
Tốt. Có, nó có vẻ hơi lộn xộn, nhưng tôi đã không đưa ra cú pháp nhiều suy nghĩ cho câu trả lời này. Bạn có thể có thể đưa ra một số cú pháp ngắn gọn hơn, hoặc bạn có thể làm điều gì đó xấu xa như ghi đè toán tử === trong các lớp bạn muốn có trên LHS. – janm
Cảm ơn - Tôi có thể ngắn gọn hơn một chút nhưng nó cũng khiến tôi nghĩ rằng tôi có thể sử dụng công cụ sai (trường hợp) cho công việc, nhưng nó hoạt động, vì vậy cảm ơn bạn (tôi nên hỏi điều này ngày hôm qua). – Marcin