2013-08-13 27 views
7

Sự khác biệt giữa nối và thêm một dấu hai chấm trong ruby ​​là gì?Sự khác biệt giữa giao diện người dùng và nối thêm dấu hai chấm (: mục so với mặt hàng :)

Ví dụ:

#In rails you often have things like this: 
has_many :models, dependent: :destroy 

Tại sao dependent: có một thư ruột kết nối, nhưng :models:destroy có dấu hai chấm được thêm vào trước? Sự khác biệt là gì?

+0

có thể trùng lặp của [Có bất kỳ sự khác biệt nào giữa \ ": khóa =>" giá trị "\' và \ 'khóa:" giá trị "\' băm ký hiệu?] (Http://stackoverflow.com/questions/8675206/is-there-any-different-between-the-key-giá trị-và-khóa-giá trị-băm-không) –

Trả lời

9

Đây là một cú pháp mới trong Ruby 1.9 để xác định biểu tượng là chìa khóa trong một hash.

Cả hai được gắn trước và nối thêm : xác định symbol, nhưng sau này chỉ hợp lệ trong quá trình khởi tạo băm.

Bạn có thể nghĩ một số symbol dưới dạng hằng số chuỗi nhẹ.

Nó tương đương với

:dependent => :destroy 

Trước 1.9, băm được xác định với một cú pháp đó là hơi dài dòng hơn và khó khăn khi phải gõ:

hash = { 
    :key => "value", 
    :another_key => 4 
} 

Họ đơn giản hóa nó trong 1.9:

hash = { 
    key: "value", 
    another_key: 4 
} 

Nếu bạn đã từng viết một mô-đun bạn muốn sử dụng trên Ruby trước 1.9, hãy đảm bảo bạn e cú pháp cũ hơn.

4

Trong cả hai trường hợp dấu hai chấm biểu thị một biểu tượng, nhưng chắp thêm nó là viết tắt khi biểu tượng là khóa trong băm.

dependent: :destroy 

cũng giống như

:dependent => :destroy 
2

Dấu hai chấm "nối thêm" chỉ đơn giản là cách phổ biến mới để hiển thị băm trong 1,9.

dependent: :destroy là điều tương tự như :dependent => :destroy

Mặt khác, một "prepended" ruột cho thấy một kiểu dữ liệu biểu tượng trong Ruby.

5

Kể từ của Ruby cho phép bạn bỏ qua ngoặc () và trong một số trường hợp xoăn niềng răng {} nó có thể không phải rất rõ ràng nhưng các mã trên là thực sự tìm kiếm như thế này:

has_many(:models, { dependent: :destroy })

Bây giờ, nó có nghĩa là has_many có hai đối số, một là một biểu tượng :, một chuỗi không thay đổi nếu bạn muốn, và cũng là một băm nơi dependent là khóa và destroy là giá trị; cũng có thể được xem là :dependent => destroy.

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