Tôi đã đọc trên RSpec và tôi đã cố gắng tìm ra cách "cần" của RSpec được triển khai như thế nào.Lập trình meta Ruby, làm thế nào để 'làm việc' của RSpec hoạt động?
Ai đó có thể đưa ra một tay về tính chất meta của chức năng này hoạt động như thế nào?
Mã này nằm ở đây:
http://github.com/dchelimsky/rspec/blob/master/lib/spec/expectations/extensions/kernel.rb
TIA,
-daniel
Làm rõ:
target.should == 5
Làm thế nào mà giá trị mục tiêu có được thông qua cùng với "nên ", lần lượt là" == "'d so với 5?
Cảm ơn fo một lời giải thích chút lớn không chỉ trả lời câu hỏi mà còn là một bản tóm tắt hay về một số cơ chế trong Ruby. Đối với những người mới sử dụng Ruby, hãy lưu ý rằng biểu thức cuối cùng trong hàm là ngầm định giá trị trả về, vì vậy phải ở trên trong C++ là Matcher * Kernel :: should() { trả về Matcher mới (this); } –
@Andy Dent: cảm ơn bạn đã nhận xét tích cực –
Đầu tiên: Câu trả lời rất hay, cảm ơn rất nhiều! Hai quan sát nhanh: thay vì định nghĩa "nên" trên mô-đun hạt nhân, bạn có thể làm điều đó trên đối tượng lớp. Tôi thấy nó an toàn hơn, vì nó ít chung chung hơn. Điều thứ hai là bạn không cần metaprogramming để xác định phương thức ==. Bạn chỉ có thể xác định nó như bất kỳ phương pháp bình thường nào khác, để dễ đọc hơn: def == (mong đợi) –