Ruby sử dụng phương thức initialize
làm hàm tạo của đối tượng. Nó là một phần của ngôn ngữ Ruby, không cụ thể cho khung Rails. Nó được gọi khi bạn instanstiate một đối tượng mới như:
@person = Person.new
Gọi phương thức mức new
lớp trên Class
phân bổ một loại của lớp đó, và sau đó gọi phương pháp của đối tượng initialize
:
http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-new
Tất cả các đối tượng đều có phương thức mặc định là initialize
không chấp nhận tham số (bạn không cần phải viết một tham số - bạn tự động nhận được thông số này). Nếu bạn muốn đối tượng của bạn làm điều gì đó khác trong phương thức initialize
, bạn cần xác định phiên bản của riêng bạn.
Trong ví dụ của bạn, bạn đang chuyển băm đến phương thức initialize
có thể được sử dụng để đặt giá trị mặc định là @name
và @email
.
Bạn sử dụng này như:
@person = Person.new({name: 'John Appleseed', email: '[email protected]'})
Lý do initializer có một giá trị mặc định cho các thuộc tính (attributes = {}
đặt giá trị mặc định cho một băm ampty - {}
) là để bạn cũng có thể gọi nó mà không cần phải để vượt qua một đối số. Nếu bạn không chỉ định đối số, thì attributes
sẽ là một băm rỗng, và do đó cả hai @name
và @email
sẽ là giá trị nil
vì không có giá trị cho các khóa đó (:name
và :email
).
Nguồn
2012-11-04 07:51:08
Một vài điểm nữa: cơ chế sử dụng 'initialize' thực sự là một Ruby không phải là một Rails. Việc chuyển một giá trị băm rỗng làm giá trị mặc định cho các thuộc tính ('attributes = {}') sẽ trả về giá trị nil khi cố gắng truy cập khóa không được đặt trên hash 'attributes [: name] # nil' - nếu không có giá trị mặc định được thiết lập (như 'khởi tạo (thuộc tính)' truy cập thuộc tính trong phương thức sẽ ném một lỗi 'thuộc tính [: something] # error'. – tamersalama
Điểm tốt - được chỉnh sửa để làm rõ rằng nó là một phần của Ruby và được liên kết với tài liệu Ruby giải thích phương thức 'mới' và cách nó gọi' initialize'. –
Michael và tamersalama, cảm ơn thông tin. Tôi hiểu là đã khởi tạo ngay bây giờ – jason328