มีงานเลี้ยงอาหารค่ำสุดสัปดาห์นี้และญาติของคุณได้รับเชิญ ในฐานะเจ้าบ้าน คุณมีงานต้องทำมากมายและมีเวลาทำน้อย ก่อนที่จะใช้งานอาหารเรียกน้ำย่อยมื้อแรกของคุณ คำเชิญจะถูกส่งไป รวบรวมคำตอบ และแก้ไขจุดบกพร่อง ทั้งหมดนี้ในขณะเดียวกันก็ป้องกันไม่ให้ญาติพี่น้องทำลายสิ่งใดๆ

เนื่องจากมีกิจกรรมให้ทำมากมาย คุณจึงขอให้เพื่อนของตนที่ environment.rb ช่วยจัดระเบียบและส่งคำเชิญ

Gemfile อยู่เป็นฝูงเช่นเคย ตอบรับคำเชิญด้วยการโทรนานหนึ่งชั่วโมง ลุงเรค สั่งเร็ว แต่รับช้า ตอบกลับช้าไปหน่อย ครอบครัว DB ที่อุดมสมบูรณ์จะอพยพไปพร้อมกับเมล็ดพันธุ์แรกเกิดที่ลากจูงมา .lock ลูกชายที่ห่างเหินของ Gemfile ก็อาจปรากฏตัวเช่นกัน คุณเริ่มคิดว่าคุณจะต้องการไก่งวงตัวอื่น

สิ่งที่จำเป็นคืออะไร

require_all” และ “require_relative” ของ Ruby เป็นวิธีการหลักของอ็อบเจ็กต์ Ruby Kernel แต่ละคนมีหน้าที่รับผิดชอบในการโหลดไฟล์หรือกลุ่มของไฟล์ไปยังไฟล์ที่ต้องการโดยการบันทึกและ/หรือโหลดพาธของไฟล์ที่ต้องการไปยังตัวแปรสภาพแวดล้อม Ruby โกลบอล ซึ่งเก็บอาร์เรย์ของพาธไฟล์เป็นสตริง

เมื่อโหลดไฟล์ที่ต้องการสำเร็จ ตัวแปรโกลบอลหรือค่าคงที่ทั้งหมดจากไฟล์ที่โหลดจะพร้อมใช้งานหลังจากการเรียก need

พบไฟล์ที่ต้องการได้อย่างไร

วิธีการ need ใช้อาร์กิวเมนต์ของพา ธ ไฟล์เดียวเป็นสตริง เส้นทางไฟล์อาจเป็นแบบสัมบูรณ์หรือสัมพันธ์กับไฟล์ที่มีการเรียกใช้เมธอดนั้น แต่ละวิธีจะเริ่มการค้นหาไฟล์ที่ต้องการตามพาธที่สัมพันธ์กับไฟล์ที่มีการเรียกใช้เมธอดนั้น จากนั้นจะเป็นพาธไฟล์สัมบูรณ์จากไดเร็กทอรี

หากพบรายการที่ตรงกัน ระบบจะโหลดเป็นตัวแปรสภาพแวดล้อม และวิธีการจะส่งกลับ true

อย่างไรก็ตาม หากไม่มีการส่งคืนไฟล์ที่ตรงกันด้วยวิธีนี้ Ruby จะค้นหาไฟล์ตามพาธเดียวกันกับ .so, .o, .or,และ.dll นามสกุลไฟล์ ซึ่งเข้ากันได้กับ Ruby เช่นกัน

ผลลัพธ์ที่ว่างเปล่าที่นี่จะทำให้วิธีการค้นหาตัวแปรสภาพแวดล้อม $LOAD_PATH หรือ $PATH(เฉพาะ Windows และ MacOS ตามลำดับ) ซึ่งมีไฟล์ที่โหลดก่อนหน้านี้ทั้งหมด การจับคู่ที่นี่จะทำให้วิธีการส่งคืน false และจะไม่โหลดไฟล์อีกครั้ง ดังนั้น พาธไฟล์ที่จำเป็นสามารถบันทึกลงในตัวแปรสภาพแวดล้อมได้เพียงครั้งเดียวเท่านั้น

หากไม่พบไฟล์ที่ตรงกันด้วยวิธีนี้ LoadError จะถูกส่งกลับ

ไฟล์โหลดอยู่ที่ไหน

ไฟล์ทั้งหมดที่ระบุในโปรแกรมของคุณจะถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อม bash “$LOAD_PATH” หรือ “$PATH” ซึ่งเป็นอาร์เรย์ของสตริงพาธของไฟล์ที่ชี้ไปยังตำแหน่งที่เก็บไฟล์ Ruby

ตัวแปรคงที่หรือตัวแปรโกลบอลที่โหลดจากพาธไฟล์ที่ส่งผ่านโดย "require" จะถูกบันทึกและทำให้พร้อมใช้งานในเนมสเปซส่วนกลางของโปรแกรมที่เรียก ยกเว้นตัวแปรโลคัล

คาดหวังคำตอบอะไรบ้าง

ค่าคงที่หรือค่าโกลบอลภายในไฟล์ต้นฉบับที่โหลดจะมีอยู่ในเนมสเปซโกลบอลของโปรแกรมที่เรียก อย่างไรก็ตาม ตัวแปรภายในเครื่องจะไม่ถูกเผยแพร่ไปยังสภาพแวดล้อมการโหลด

TLDR; ต้องทำให้ vars ทั้งหมดยกเว้น vars ในเครื่องจากไฟล์หนึ่งพร้อมใช้งานในอีกไฟล์หนึ่ง

แหล่งที่มา:

Ruby-doc.org: https://ruby-doc.org/core-2.5.1/Kernel.html#method-i-require

Thought Co. Michael Morin: https://www. thoughtco.com/requre-method-2908199

Giphy: https://giphy.com/