2015-02-05 13 views
12

Tôi mới dùng ruby ​​và ray cả hai. Tôi nghĩ Rails là một trong những API tốt nhất, và ruby ​​là khá độc đáo, có vẻ như ruby ​​có thể khéo léo làm "giả định" để giúp nhà phát triển. Nhưng tôi không quá chắc chắn với những gì mở rộng.

câu hỏi của tôi là về dấu hai chấm.
Những gì tôi đã hiểu cho đến nay là : biến trong ruby, là để nói rằng biến này sẽ không thể thay đổi, tương tự như hằng số trong ngôn ngữ khác. Tôi có đúng không ??ruby ​​trên đường ray, dấu hai chấm ở mặt sau hoặc mặt trước của các biến

Sau đó, sự nhầm lẫn của tôi là, đôi khi tôi thấy trước mặt ruột của biến, như thế này

Rails.application.config.session_store :cookie_store, 
     key: '_blog_session' 
    <%= link_to "Delete", article, confirm: "Are you sure?", 
     method: :delete %> 

Cả chính:phương pháp: có ruột trong front.What không rằng đây đại diện? và hơn nữa

Blog::Application.routes.draw.do 
    root :to => "articles#index" 
end 

Có hai dấu hai chấm giữa các biến? bây giờ tôi đoán rằng Blog: là một biến và: Ứng dụng là hằng số. mà tôi nghi ngờ nó là, bởi vì nó không có ý nghĩa. Vui lòng làm sáng tỏ cho tôi?

cảm ơn bạn

+0

Đây không phải là biến và cũng không đổi. Đó là cú pháp của Ruby [Symbol] (http://www.ruby-doc.org/core-2.2.0/Symbol.html). Cú pháp 'Blog :: Application' không liên quan đến các ký hiệu, nó là về việc giải quyết [các không gian tên] (http://ruby-doc.com/docs/ProgrammingRuby/html/tut_modules.html). –

+0

Chỉ cần rõ ràng, bạn có nghĩa là Blog là một không gian tên? hoặc Ứng dụng là một không gian tên? những gì về đại tràng ở phía trước, giống như phương pháp: hoặc chìa khóa: – vdj4y

+0

Blog là không gian tên. Nhìn vào liên kết tôi đã cung cấp. Cú pháp như '{method: 'delete'}' vv là một cú pháp băm, tương đương với '{: method => 'delete'}'. –

Trả lời

31

Điều tôi đã hiểu cho đến nay là :variable trong ruby, là để nói rằng biến này sẽ không thể thay đổi, tương tự như hằng số trong ngôn ngữ khác.

Tôi không chắc liệu tôi có hiểu tuyên bố đó không.Trong Ruby, hằng bắt đầu với một chữ cái viết hoa:

Foo = 1 

phân công lại tạo ra một cảnh báo:

Foo = 1 
Foo = 2 #=> warning: already initialized constant Foo 

Biến bắt đầu với một chữ cái thường và thuyên chuyển không gây ra một cảnh báo (họ phải thay đổi):

foo = 1 
foo = 2 # no warning 

Ký hiệu bắt đầu bằng dấu hai chấm:

:a_symbol 
:Uppercase_symbol 
:"i'm a symbol, too" 

Chúng thường biểu thị các giá trị tĩnh, ví dụ: :get:post. Biểu tượng là bộ nhớ hiệu quả, bởi vì chúng được tạo ra chỉ một lần - cùng một biểu tượng chữ luôn trả về cùng một đối tượng. Kiểm tra nếu hai biểu tượng là bằng nhau là một hoạt động giá rẻ.

Cả hai key:method: (...) Điều này đại diện cho điều gì?

Đây là cú pháp thay thế cho băm. Bạn có thể gõ nó trong IRB để xem kết quả:

{ foo: 1, bar: 2 } 
#=> {:foo=>1, :bar=>2} 

Có dấu hai chấm đôi biến Inbetween? bây giờ tôi đoán rằng Blog: là một biến và :Application là không đổi.

Không, BlogApplication đều hằng số và :: là các nhà điều hành có độ phân giải phạm vi. Nó có thể được sử dụng để truy cập vào các hằng số lồng nhau, ví dụ:

module Foo 
    class Bar 
    BAZ = 123 
    end 
end 

Foo::Bar::BAZ #=> 123 
+0

Tuyệt vời, ngắn gọn và rõ ràng. thanks – vdj4y

+0

@Stefan thêm một sự nhầm lẫn 'params = {}' params [mehtods:] =: xóa lỗi cú pháp, không mong muốn '] 'nhưng nếu params [: mehtods] =: xóa bây giờ thì sao? – VKatz

+0

@VinayGupta cú pháp thay thế chỉ hoạt động đối với khóa-giá trị * *, ví dụ: '{method:: delete}'. Nếu không, dấu hai chấm luôn luôn là đầu tiên. – Stefan

3
Rails.application.config.session_store :cookie_store, key: '_blog_session' 

session_store là một phương pháp mà phải mất hai "luận cứ":

  • :cookie_store là một Symbol
  • key: '_blog_session' thực sự là một cách ngắn viết một Hash.

(cũng có thể là session_store :cookie_store, { key: '_blog_session' })

Tương tự như vậy cho link_to "Delete", article, confirm: "Are you sure?", method: :delete

  • "Delete" là một chuỗi
  • article một biến
  • { confirm: '...', method: :delete } băm nơi confirm:, method::delete là biểu tượng một lần nữa.

Trong khi Blog::Application:: is basically a namespace resolution operator. Một cách để bạn giải quyết lớp Ứng dụng trong mô-đun Blog.

Hy vọng điều này sẽ hữu ích. Có một cái nhìn tại các tài liệu tôi tham chiếu, nó được giải thích khá độc đáo.

+0

'xác nhận:" Bạn có chắc chắn không? ", Phương pháp:: xóa' là * một * băm, không phải hai số – Stefan

+0

@Stefan bạn là đúng của khóa học. – wpp

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