Bất cứ ai có thể giải thích sự khác biệt giữa việc truy cập thuộc tính cá thể thông qua self.attribute
và bằng cách @attribute
?
Bất cứ ai có thể giải thích sự khác biệt giữa việc truy cập thuộc tính cá thể thông qua self.attribute
và bằng cách @attribute
?
Câu trả lời:
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 cá thể @attribute
.
Vì vậy, về cơ bản chúng là hai thứ hoàn toàn khác nhau.
Tuy nhiên, nếu bạn gọi attr_accessor :attribute
nó sẽ xác định phương thức attribute
trả về @attribute
và phương thức attribute=(value)
để đặt @attribute = value
. Vì vậy, trong trường hợp đó, không có sự khác biệt.
"Truy cập trực tiếp biến phiên bản nhanh hơn khoảng hai lần so với truy cập chúng bằng các phương thức của trình truy cập"
Kiểm tra: https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/
self.
(trừ khi bạn đang viết phương thức getter / setter) ngay cả khi bạn hiện cóattr_accessor
. Điều này bảo vệ bạn khỏi 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 của trình truy cập để làm nhiều việc hơn là chỉ lấy / đặt biến cá thể. (Hoặc nếu ai đó bản vá lỗi khác hoặc lớp con công việc của bạn.)