Path untuk Merujuk ke Item dalam Pohon Modul

Untuk menunjukkan kepada Cairo di mana menemukan suatu item dalam pohon modul, kita menggunakan path dengan cara yang sama seperti kita menggunakan path saat menjelajahi sistem file. Untuk memanggil sebuah fungsi, kita perlu tahu path-nya.

Sebuah path dapat memiliki dua bentuk:

  • Sebuah absolute path adalah path lengkap yang dimulai dari root kardus. Absolute path dimulai dengan nama kardus.

  • Sebuah relative path dimulai dari modul saat ini.

    Keduanya, absolute dan relative paths diikuti oleh satu atau lebih identifikasi yang dipisahkan oleh titik dua ganda (::).

Untuk mengilustrasikan konsep ini, mari kita ambil contoh Listing 7-1 untuk restoran yang kita gunakan dalam bab terakhir. Kita memiliki sebuah kardus bernama restaurant di dalamnya terdapat modul bernama front_of_house yang berisi modul bernama hosting. Modul hosting berisi fungsi bernama add_to_waitlist. Kita ingin memanggil fungsi add_to_waitlist dari fungsi eat_at_restaurant. Kita perlu memberi tahu Cairo path ke fungsi add_to_waitlist agar bisa menemukannya.

Nama File: src/lib.cairo

{{#include ../listings/ch07-managing-cairo-projects-with-packages-crates-and-modules/listing_06_03/src/lib.cairo}}

Listing 7-3: Memanggil fungsi add_to_waitlist menggunakan absolute dan relative paths

Pertama kali kita memanggil fungsi add_to_waitlist di dalam eat_at_restaurant, kita menggunakan absolute path. Fungsi add_to_waitlist didefinisikan dalam kardus yang sama dengan eat_at_restaurant. Dalam Cairo, absolute paths dimulai dari root kardus, yang perlu Anda sebutkan dengan menggunakan nama kardus.

Kedua kalinya kita memanggil add_to_waitlist, kita menggunakan relative path. Path dimulai dengan front_of_house, nama modul yang didefinisikan pada tingkat yang sama dalam pohon modul seperti eat_at_restaurant. Di sini, ekuivalen sistem file akan menggunakan path ./front_of_house/hosting/add_to_waitlist. Memulai dengan nama modul berarti bahwa path ini bersifat relatif terhadap modul saat ini.

Memulai Relative Paths dengan super

Memilih apakah akan menggunakan super atau tidak adalah keputusan yang akan Anda ambil berdasarkan proyek Anda, dan tergantung pada apakah Anda lebih mungkin memindahkan definisi item terpisah dari atau bersamaan dengan kode yang menggunakan item tersebut.

Nama File: src/lib.cairo

{{#include ../listings/ch07-managing-cairo-projects-with-packages-crates-and-modules/listing_06_04/src/lib.cairo}}

Listing 7-4: Memanggil fungsi menggunakan relative path yang dimulai dengan super

Di sini Anda dapat melihat secara langsung bahwa Anda dapat mengakses modul induk dengan mudah menggunakan super, yang tidak mungkin sebelumnya.