Ruby modul (Modul)
Modul (modul) adalah cara untuk metode, kelas, dan konstanta gabungan cara. Modul (modul) menyediakan dua manfaat.
- Modul menyediakannamespacedan mencegah konflik nama.
- Modul menerapkan perangkatmixin.
Modul (modul) mendefinisikan namespace, setara dengan bak pasir, metode dan konstanta tidak konstanta dan metode konflik di tempat lain di dalamnya.
Modul kelas yang sama, namun dengan tampilan yang berbeda:
- Modul tidak dapat dipakai
- Modul ada subclass
- Modul hanya dapat didefinisikan oleh modul lain
tatabahasa
module Identifier statement1 statement2 ........... end
Modul bernama konstanta dan konstanta kelas bernama sama, dimulai dengan huruf kapital. Definisi metode seperti: pendekatan modular mirip dengan mendefinisikan definisi metode kelas.
Melalui metode kelas, Anda dapat menempatkan nama modul dan sebuah titik di depan nama kelas metode untuk memanggil pendekatan modular, Anda dapat menggunakan nama modul dan dua titik dua untuk referensi konstan.
contoh
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
Kita dapat mendefinisikan beberapa fungsi dengan nama yang sama tetapi modul fungsional yang berbeda:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
Seperti metode kelas, ketika Anda mendefinisikan sebuah metode dalam modul, Anda dapat menentukan nama modul diikuti oleh sebuah titik setelah dot diikuti dengan nama metode.
Rubymembutuhkan pernyataan
membutuhkan pernyataan ini mirip dengan C dan C ++, dan termasuk pernyataan dalam laporan impor Java. Jika program pihak ketiga yang ingin Anda gunakan salah satu modul yang telah ditetapkan, Anda hanya dapat menggunakanRubymembutuhkan pernyataan untuk memuat file modul:
tatabahasa
require filename
Di sini, ekstensi file tidakRb diperlukan.
contoh
$ LOAD_PATH << '.' membutuhkan 'trig.rb' membutuhkan "moral" y = Trig.sin (Trig :: PI / 4) kesalahan = Moral.sin (Moral :: VERY_BAD)
Di sini, kita menggunakan$ LOAD_PATH << '.' Biarkan Ruby tahu bahwa kita harus mencari file yang dirujuk dalam direktori saat ini.Jika Anda tidak ingin menggunakan $ LOAD_PATH, Anda dapat menggunakanrequire_relative untuk referensi file dari direktori relatif.
Catatan: Di sini, file berisi nama fungsi yang sama.Jadi, ini akan menyebabkan kebingungan ketika mengacu pada program menelepon tetapi modul menghindari kode kebingungan ini, dan kita dapat menggunakan nama modul untuk memanggil fungsi yang sesuai.
Rubytermasuk pernyataan
Anda dapat menanamkan modul di kelas. Dalam rangka menanamkan dalam modul kelas, Anda dapat menggunakantermasukpernyataan di kelas Anda:
tatabahasa
include modulename
Jika modul didefinisikan dalam file terpisah, jadi sebelum Anda perlu menggunakan modul tertanammemerlukanlaporan referensi file.
contoh
Dengan asumsi modul berikut ditulis dalam filesupport.rb.
module Week FIRST_DAY = "Sunday" def Week.weeks_in_month puts "You have four weeks in a month" end def Week.weeks_in_year puts "You have 52 weeks in a year" end end
Anda sekarang dapat referensi modul di kelas, sebagai berikut:
#!/usr/bin/ruby $LOAD_PATH << '.' require "support" class Decade include Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month Week.weeks_in_year d1.no_of_months
Ini menghasilkan hasil sebagai berikut:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Ruby di mixin
Sebelum membaca bagian ini, Anda akan memerlukan pemahaman awal konsep berorientasi objek.
Ketika kelas bisa lebih dari satu kelas induk ketika kelas fitur mewarisi dari, kelas ditampilkan sebagai multiple inheritance.
Ruby tidak langsung mendukung multiple inheritance, namun modul Ruby (Modul) memiliki fitur lain yang fantastis. Ini hampir menghilangkan kebutuhan untuk beberapa warisan, disediakan sebuah alat yang disebutmixin a.
Ruby tidak benar-benar mencapai beberapa mekanisme warisan, tetapi mengadopsi teknologi mixin sebagai pemain pengganti. Modul meliputi definisi kelas, pendekatan modul untuk mencampur ke dalam kelas.
Mari kita lihat kode contoh berikut, pemahaman mendalam dari mixin:
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1
- Sebuah modul terdiri oleh proses a1 dan a2.
- Modul B dengan metode komposisi b1 dan b2.
- kelas sampel berisi modul A dan B.
- kelas sampel dapat mengakses semua empat metode, yaitu, a1, a2, b1 dan b2.