Câu trả lời:
title
là một biến cục bộ. Chúng chỉ tồn tại trong phạm vi của nó (khối hiện tại)
@title
là một biến thể hiện - và có sẵn cho tất cả các phương thức trong lớp.
Bạn có thể đọc thêm tại đây: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
Trong Ruby on Rails - khai báo các biến của bạn trong bộ điều khiển của bạn dưới dạng các biến thể hiện ( @title
) làm cho chúng có sẵn cho chế độ xem của bạn.
Sử dụng @title
trong bộ điều khiển của bạn khi bạn muốn biến của bạn có sẵn trong chế độ xem của bạn.
Giải thích là @title
một biến đối tượng và title
là một biến cục bộ và đường ray làm cho các biến thể hiện từ các bộ điều khiển có sẵn cho các khung nhìn. Điều này xảy ra bởi vì mã mẫu (erb, haml, v.v.) được thực thi trong phạm vi của thể hiện của bộ điều khiển hiện tại.
Sự khác biệt là trong phạm vi của biến. @Version có sẵn cho tất cả các phương thức của thể hiện của lớp.
Câu trả lời ngắn, nếu bạn đang ở trong bộ điều khiển và bạn cần làm cho biến có sẵn cho chế độ xem thì hãy sử dụng @variable
.
Để có câu trả lời dài hơn, hãy thử điều này: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_groupes.html
@variable
s được gọi là các biến thể hiện trong ruby. Điều đó có nghĩa là bạn có thể truy cập các biến này trong BẤT K MET PHƯƠNG PHÁP nào trong lớp. [Trên tất cả các phương thức trong lớp]
Các biến không có @
ký hiệu được gọi là các biến cục bộ, có nghĩa là bạn chỉ có thể truy cập các biến cục bộ này trong PHƯƠNG PHÁP KHAI THÁC. Giới hạn trong phạm vi địa phương.
Ví dụ về biến sơ thẩm:
class Customer
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details
puts "Customer id #{@cust_id}"
puts "Customer name #{@cust_name}"
puts "Customer address #{@cust_addr}"
end
end
Trong ví dụ trên @cust_id
, @cust_name
, @cust_addr
được truy cập trong phương pháp khác trong lớp. Nhưng điều tương tự sẽ không thể truy cập được với các biến cục bộ.
Hướng dẫn về Phạm vi biến là gì? trình bày một số chi tiết khá tốt, chỉ cần đính kèm các liên quan ở đây.
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Một biến cục bộ chỉ có thể truy cập được từ bên trong khối khởi tạo của nó. Ngoài ra một biến cục bộ bắt đầu bằng một chữ cái viết thường (az) hoặc gạch dưới (_).
Và biến đối tượng là một thể hiện self
và bắt đầu bằng một @
biến thể hiện cũng thuộc về chính đối tượng đó. Các biến sơ thẩm là các biến mà bạn thực hiện các phương thức trên, .send
v.v.
thí dụ:
@user = User.all
Biến thể @user
là
Và các biến đối tượng Uninitialized có giá trị là Nil
@title
& title
?
@title
haytitle
@ biến là biến thể hiện, không có biến cục bộ.
Đọc thêm tại http://ruby.about.com/od/variables/a/Instance-Variables.htmlm