ความแตกต่างระหว่าง@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
@variables ถูกเรียกว่าตัวแปรอินสแตนซ์ในทับทิม ซึ่งหมายความว่าคุณสามารถเข้าถึงตัวแปรเหล่านี้ในวิธีใดก็ได้ภายในชั้นเรียน [ข้ามทุกวิธีในชั้นเรียน]
ตัวแปรที่ไม่มี@สัญลักษณ์เรียกว่าตัวแปรท้องถิ่นซึ่งหมายความว่าคุณสามารถเข้าถึงตัวแปรท้องถิ่นเหล่านี้ภายในวิธีการที่ได้ประกาศไว้เท่านั้น จำกัด อยู่ที่ขอบเขตในท้องถิ่น
ตัวอย่างของตัวแปรอินสแตนซ์:
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