แค่ทำสิ่งนี้:
require_relative 'tokenizer'
หากคุณวางสิ่งนี้ลงในไฟล์ Ruby ที่อยู่ในไดเรกทอรีเดียวกันtokenizer.rb
มันจะทำงานได้ดีไม่ว่าไดเรกทอรีทำงานปัจจุบันของคุณคืออะไร
คำอธิบายว่าทำไมจึงเป็นวิธีที่ดีที่สุด
คำตอบอื่น ๆ อ้างว่าคุณควรใช้require './tokenizer'
แต่นั่นเป็นคำตอบที่ผิดเพราะมันจะใช้ได้เฉพาะเมื่อคุณรันกระบวนการ Ruby ของคุณในไดเรกทอรีเดียวกันกับที่tokenizer.rb
ในนั้นค่อนข้างมากเหตุผลเดียวที่คุณควรพิจารณาใช้require
เช่นนั้นคือถ้าคุณต้องการ สนับสนุน Ruby 1.8 ซึ่งไม่มีrequire_relative
อยู่
require './tokenizer'
คำตอบอาจทำงานสำหรับคุณในวันนี้ แต่มันไม่จำเป็น จำกัด วิธีการที่คุณสามารถเรียกใช้รหัสทับทิมของคุณ พรุ่งนี้ถ้าคุณต้องการย้ายไฟล์ของคุณไปยังไดเรกทอรีอื่นหรือเพียงแค่ต้องการเริ่มต้นกระบวนการ Ruby ของคุณจากไดเรกทอรีอื่นคุณจะต้องคิดทบทวนrequire
คำสั่งเหล่านั้นใหม่
การใช้require
เพื่อเข้าถึงไฟล์ที่อยู่บนพา ธ การโหลดเป็นสิ่งที่ดีและ Ruby gems ทำตลอดเวลา แต่คุณไม่ควรเริ่มโต้แย้งrequire
ด้วย.
ถ้าคุณกำลังทำสิ่งที่พิเศษมากและรู้ว่าคุณกำลังทำอะไรอยู่
เมื่อคุณเขียนโค้ดที่ทำให้สมมติฐานเกี่ยวกับสภาพแวดล้อมของมันคุณควรคิดอย่างรอบคอบเกี่ยวกับสมมติฐานที่จะทำ ในกรณีนี้มีวิธีที่แตกต่างกันถึงสามวิธีในการเรียกใช้tokenizer
ไฟล์และแต่ละวิธีมีข้อสมมติที่แตกต่างกัน:
require_relative 'path/to/tokenizer'
: สมมติว่าเส้นทางสัมพัทธ์ระหว่างสองไฟล์ต้นฉบับของ Ruby จะยังคงเหมือนเดิม
require 'path/to/tokenizer'
: ถือว่าpath/to/tokenizer
อยู่ในไดเรกทอรีใดไดเรกทอรีหนึ่งบนโหลดพา ธ ( $LOAD_PATH
) โดยทั่วไปต้องใช้การตั้งค่าเพิ่มเติมเนื่องจากคุณต้องเพิ่มบางสิ่งลงในโหลดพา ธ
require './path/to/tokenizer'
: สมมติว่าเส้นทางสัมพัทธ์จากไดเร็กทอรีการทำงานปัจจุบันของกระบวนการ Ruby tokenizer.rb
กำลังจะยังคงเหมือนเดิม
ฉันคิดว่าสำหรับคนส่วนใหญ่และสถานการณ์ส่วนใหญ่สมมติฐานที่ทำในตัวเลือก # 1 และ # 2 มีแนวโน้มที่จะถือเป็นจริงเมื่อเวลาผ่านไป