2011-01-09 38 views

Trả lời

97

self.attribute gọi phương thức attribute.
self.attribute = value gọi phương thức attribute= với đối số value.
@attribute@attribute = value lấy/đặt giá trị của biến mẫu @attribute.

Vì vậy, về cơ bản chúng là hai điều hoàn toàn khác nhau.

Tuy nhiên nếu bạn gọi attr_accessor :attribute, hãy xác định phương thức attribute để trả lại @attribute và phương pháp attribute=(value) để đặt @attribute = value. Vì vậy, trong trường hợp đó, không có sự khác biệt.

+14

Lưu ý rằng nó thường được khuyến cáo sử dụng 'self.' (trừ khi bạn viết phương thức getter/setter) ngay cả khi bạn _currently_ có 'attr_accessor'. Điều này bảo vệ bạn khỏi các công việc tái cấu trúc bổ sung và các lỗi nếu sau này bạn thay đổi (các) phương thức accessor để làm nhiều hơn là chỉ nhận/thiết lập biến cá thể. (Hoặc nếu ai đó vá hoặc phân lớp công việc của bạn.) – Phrogz

+6

Một trong những lỗi mà Phrogz đang nói đến là bạn chỉ cần gọi thuộc tính = _____ thay vì self.attribute = ______ bạn đang thiết lập biến cục bộ thay vì biến mẫu. –

Các vấn đề liên quan