ความแตกต่างระหว่าง@title
และtitle
คืออะไร เนื่องจากทั้งคู่สามารถเป็นชื่อตัวแปรได้ นอกจากนี้ฉันจะตัดสินใจได้อย่างไรว่าควรใช้ตัวแปรชนิดใด มี@
หรือไม่
ความแตกต่างระหว่าง@title
และtitle
คืออะไร เนื่องจากทั้งคู่สามารถเป็นชื่อตัวแปรได้ นอกจากนี้ฉันจะตัดสินใจได้อย่างไรว่าควรใช้ตัวแปรชนิดใด มี@
หรือไม่
คำตอบ:
title
เป็นตัวแปรท้องถิ่น มีอยู่ในขอบเขตเท่านั้น (บล็อกปัจจุบัน)
@title
เป็นตัวแปรอินสแตนซ์ - และใช้ได้กับวิธีการทั้งหมดภายในชั้นเรียน
คุณสามารถอ่านเพิ่มเติมได้ที่นี่: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
ใน Ruby on Rails การประกาศตัวแปรของคุณในคอนโทรลเลอร์เป็นตัวแปรอินสแตนซ์ ( @title
) ทำให้สามารถดูได้
ใช้@title
ในตัวควบคุมของคุณเมื่อคุณต้องการให้ตัวแปรของคุณพร้อมใช้งานในมุมมองของคุณ
คำอธิบายนั่น@title
คือตัวแปรอินสแตนซ์และtitle
เป็นตัวแปรโลคัลและ Rails ทำให้ตัวแปรอินสแตนซ์จากคอนโทรลเลอร์สามารถดูได้ สิ่งนี้เกิดขึ้นเนื่องจากโค้ดเทมเพลต (erb, haml และอื่น ๆ ) ถูกเรียกใช้งานภายในขอบเขตของอินสแตนซ์ของตัวควบคุมปัจจุบัน
ความแตกต่างอยู่ในขอบเขตของตัวแปร @version มีให้สำหรับทุกวิธีของอินสแตนซ์ของคลาส
คำตอบสั้น ๆ , @variable
ถ้าคุณอยู่ในการควบคุมและคุณต้องการที่จะทำให้ตัวแปรที่มีให้ดูแล้วการใช้งาน
สำหรับคำตอบที่ยาวกว่านี้ลองทำดังนี้: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s ถูกเรียกว่าตัวแปรอินสแตนซ์ในทับทิม ซึ่งหมายความว่าคุณสามารถเข้าถึงตัวแปรเหล่านี้ในวิธีใดก็ได้ภายในชั้นเรียน [ข้ามทุกวิธีในชั้นเรียน]
ตัวแปรที่ไม่มี@
สัญลักษณ์เรียกว่าตัวแปรท้องถิ่นซึ่งหมายความว่าคุณสามารถเข้าถึงตัวแปรท้องถิ่นเหล่านี้ภายในวิธีการที่ได้ประกาศไว้เท่านั้น จำกัด อยู่ที่ขอบเขตในท้องถิ่น
ตัวอย่างของตัวแปรอินสแตนซ์:
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
ในตัวอย่างข้างต้น@cust_id
, @cust_name
, @cust_addr
มีการเข้าถึงในวิธีการอื่นในชั้นเรียน แต่สิ่งเดียวกันจะไม่สามารถเข้าถึงได้ด้วยตัวแปรท้องถิ่น
บทช่วยสอนเกี่ยวกับขอบเขตตัวแปรคืออะไร แสดงรายละเอียดบางอย่างได้ค่อนข้างดีเพียงล้อมรอบสิ่งที่เกี่ยวข้องไว้
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
ตัวแปรท้องถิ่นสามารถเข้าถึงได้จากภายในบล็อกของการเริ่มต้น นอกจากนี้ตัวแปรโลคัลเริ่มต้นด้วยตัวอักษรตัวพิมพ์เล็ก (az) หรือขีดล่าง (_)
และตัวแปรอินสแตนซ์เป็นตัวอย่างของself
และเริ่มต้นด้วย@
ตัวแปรอินสแตนซ์ยังเป็นของวัตถุเอง ตัวแปรอินสแตนซ์เป็นสิ่งที่คุณทำวิธีการเช่น.send
ฯลฯ
ตัวอย่าง:
@user = User.all
@user
เป็นตัวแปรเช่น
และตัวแปรอินสแตนซ์ Uninitialized มีค่าเป็น Nil
@title
& ได้title
อย่างไร
@title
หรือไม่title
ตัวแปร @ เป็นตัวแปรอินสแตนซ์โดยไม่มีตัวแปรโลคัล
อ่านเพิ่มเติมได้ที่http://ruby.about.com/od/variables/a/Instance-Variables.htm