Ada pesta makan malam akhir pekan ini dan kerabat Anda diundang. Sebagai tuan rumah, Anda memiliki banyak hal yang harus dilakukan dan sedikit waktu untuk melakukannya. Sebelum menyebarkan hidangan pembuka pertama Anda, undangan akan dikirim, tanggapan dikumpulkan, dan bug ditangani, sambil menjaga kerabat agar tidak merusak apa pun.

Dengan begitu banyak hal yang harus dilakukan, Anda meminta teman Anda environment.rb untuk membantu mengatur dan mengirimkan undangan.

Gemfile, yang suka berteman seperti biasanya, menerima RSVP dengan panggilan telepon selama satu jam. Paman Rake, yang cepat memberi perintah, tapi lamban dalam melaksanakannya, menjawab beberapa saat kemudian. Banyaknya keluarga DB akan bermigrasi dengan membawa benih mereka yang baru lahir. Putra Gemfile yang terasing, .lock, mungkin juga akan muncul. Anda mulai berpikir Anda memerlukan kalkun lagi.

Apa yang diperlukan?

require_all” dan “require_relative” Ruby adalah metode inti dari objek Kernel ruby. Masing-masing bertanggung jawab untuk memuat file atau grup file ke file yang diperlukan untuk dipanggil dengan menyimpan dan/atau memuat jalur file yang diperlukan ke variabel lingkungan Ruby global, yang menyimpan array jalur file sebagai string.

Saat berhasil memuat file yang diperlukan, semua variabel global atau konstan dari file yang dimuat akan tersedia setelah panggilan yang diperlukan.

Bagaimana cara menemukan file yang diperlukan?

Metode require mengambil argumen dari satu jalur file sebagai string. Jalur file bisa absolut atau relatif terhadap file tempat metode dipanggil. Setiap metode memulai pencariannya untuk file yang diinginkan di sepanjang jalur relatif terhadap file di mana metode tersebut dipanggil, kemudian sebagai jalur file absolut dari direktori.

Jika kecocokan ditemukan, maka akan dimuat sebagai variabel lingkungan dan metode akan mengembalikan true.

Namun, jika tidak ada file yang cocok dikembalikan dengan cara ini, Ruby akan mencari file di jalur yang sama dengan .so, .o, .or,dan.dll ekstensi file, yang juga kompatibel dengan ruby.

Hasil yang kosong di sini akan menyebabkan metode mencari variabel lingkungan, $LOAD_PATH atau $PATH(khusus untuk Windows dan MacOS), yang berisi semua file yang dimuat sebelumnya. Kecocokan di sini akan menyebabkan metode mengembalikan false, dan tidak akan memuat file lagi. Akibatnya, jalur file yang diperlukan hanya dapat disimpan ke variabel lingkungannya satu kali.

Jika tidak ditemukan file yang cocok dengan cara ini,LoadError akan dikembalikan.

Di mana file dimuat?

Semua file yang ditentukan dalam program Anda disimpan dalam variabel lingkungan bash “$LOAD_PATH” atau “$PATH”, sebuah array string jalur file yang menunjuk ke tempat penyimpanan file Ruby.

Variabel konstan atau global yang dimuat dari jalur file yang diteruskan dengan "memerlukan" akan disimpan dan tersedia di namespace global program pemanggil, tidak termasuk variabel lokal.

Tanggapan apa yang diharapkan?

Konstanta atau global apa pun dalam file sumber yang dimuat akan tersedia di namespace global program pemanggil. Namun, variabel lokal tidak akan disebarkan ke lingkungan pemuatan.

TLDR; Require membuat semua var kecuali var lokal dari satu file tersedia di file lain

Sumber:

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

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

Giphy: https://giphy.com/