class << self
attr_accessor :n, :totalX, :totalY
end
Cú pháp trên được sử dụng để xác định biến thể hiện lớp. Nhưng khi tôi nghĩ về cú pháp ngụ ý, nó không có ý nghĩa gì với tôi, vì vậy tôi tự hỏi liệu loại cú pháp này có được sử dụng cho bất kỳ loại định nghĩa nào khác không. Điểm của tôi về sự nhầm lẫn ở đây là:Trong Ruby có bất kỳ ứng dụng liên quan nào của cú pháp: lớp << tự ... kết thúc
class << self
Toán tử nối tiếp thường có nghĩa là "thêm những gì ở bên phải đối tượng ở bên trái". Nhưng trong bối cảnh của khối này, làm thế nào để thêm vào "đặt nội dung của khối này vào định nghĩa của cá thể lớp chứ không phải là cá thể"?
Đối với cùng một lý do tôi đang bối rối là tại sao trong một bối cảnh lớp < < tự có thể định nghĩa các biến lớp dụ trong khi khác có vẻ như để tạo ra các biến lớp học như ở đây:
class Point
# Instance methods go here
class << self
# Class methods go here
end
end
Ok - rằng' là một cách hay để xem - lớp thực sự là một từ điển. Nhưng thực ra bạn đã trả lời trước khi tôi thêm ví dụ cuối cùng của mình vào một ngữ cảnh khác cùng một sytax (theo cuốn sách tôi đang đọc), tạo ra các phương thức lớp thay vì các phương thức của lớp. Tại sao ví dụ lớp Point ở kết quả cuối cùng trong một phương thức lớp trong khi attr_accessor ở trên cùng cung cấp cho bạn các thuộc tính ở cấp độ cá thể lớp? –
Trên thực tế sử dụng lời giải thích bạn đã cho tôi có thể trả lời câu hỏi trong bình luận trước của tôi - phương thức attr_accessor gọi các phương thức instance_variable_set và instance_variable_get của lớp Class. Thông thường, những kết quả đó sẽ tạo ra các biến mẫu được tạo ra nhưng vì chúng ta đang thêm vào từ điển lớp, khi bạn đặt nó, chúng ta đang tạo các biến cá thể lớp. Ok, tôi nghĩ rằng tôi đã có nó ngay bây giờ. Cảm ơn. –
-1 gây hiểu nhầm, vì lớp << x ... cuối thực sự thêm thông tin vào metaclass của x chứ không phải lớp x. – rampion