Latest web development tutorials

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.
  • Sehingga Anda dapat melihat bahwa Sampel kelas mewarisi dua modul, Anda bisa mengatakan Sampel kelas menggunakan beberapa warisan ataumixin.