Có thể giải thích sự khác biệt giữa việc truy cập thuộc tính cá thể qua self.attribute
và @attribute
không?Truy cập trực tiếp biến thể hiện so với Sử dụng phương thức truy cập
77
A
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
và @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.
1
"Truy cập instance variable trực tiếp là nhanh hơn so với truy cập chúng với các phương pháp accessor khoảng hai lần"
Kiểm tra ra: http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/
Các vấn đề liên quan
- 1. Truyền các biến mẫu cho các phương thức ví dụ so với truy cập trực tiếp chúng?
- 2. Ruby không thể truy cập biến ngoài phương thức?
- 3. HPET có thể truy cập trực tiếp trong Windows không?
- 4. Truy cập trực tiếp vào TableLayoutPanel Cells
- 5. Truy cập MongoDB trực tiếp qua JavaScript
- 6. Từ chối truy cập URL trực tiếp vào phương thức hành động
- 7. truy cập các phương thức tĩnh sử dụng tên lớp biến (PHP)
- 8. Truy cập toàn cầu so với biến cục bộ
- 9. Phương thức getoutputmediafileuri không thể truy cập được?
- 10. SimpleDB truy cập trực tiếp của khách hàng
- 11. Từ chối truy cập trực tiếp vào các trang jsp
- 12. Truy cập bộ nhớ trực tiếp trong Linux
- 13. Ngăn chặn truy cập trực tiếp vào trang PHP
- 14. Truy cập các phương thức mô-đun với ::
- 15. Apache RewriteMap được sử dụng để ngăn truy cập trực tiếp vào các tệp
- 16. Bảo vệ file PHP từ truy cập trực tiếp
- 17. camera trực tiếp truy cập dữ liệu Trong iOS 4
- 18. phương pháp Mockito không thể truy cập
- 19. Hiệu suất C++ truy cập các biến thành viên so với biến cục bộ
- 20. Truy cập các trường đơn lẻ qua phương thức tĩnh
- 21. Làm cách nào để bạn truy cập một biến mẫu trong một phương thức mixin?
- 22. Java Sử dụng phương thức SQL Execute nhưng có thể truy cập các kết quả
- 23. Không thể truy cập vào vị trí $ khi sử dụng phương thức .controller trong AngularJS
- 24. Grails g: each, Sử dụng fieldvalue hoặc truy cập trực tiếp Sự khác biệt
- 25. Instance biến 'biến' truy cập do lỗi phương pháp lớp
- 26. Tôi có thể truy cập phương thức lớp và phương thức thể hiện bằng ruby như thế nào?
- 27. Tốc độ truy cập tệp so với tốc độ truy cập cơ sở dữ liệu
- 28. Tạo truy cập với nhiều biến
- 29. Truy cập các biến cấu hình Devise
- 30. Tại sao tôi không thể truy cập mảng bằng chỉ mục trực tiếp?
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
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. –