Pertanyaan saya mirip dengan " Apa perbedaan antara menyertakan dan memperluas di Ruby? ".
Apa perbedaan antara require
dan include
di Ruby? Jika saya hanya ingin menggunakan metode dari modul di kelas saya, haruskah saya require
atau include
tidak?
require
daninclude
, dan juga yang relevanModule#append_features
,.Jawaban:
Sumber
Jadi, jika Anda hanya ingin menggunakan modul, daripada memperpanjang atau melakukan mix-in, maka Anda ingin menggunakannya
require
.Anehnya, Ruby
require
analog dengan Cinclude
, sedangkan Rubyinclude
hampir tidak seperti Cinclude
.sumber
include
di Ruby hanyalah warisan.class C; include M end
membuatM
superclassC
dan (mantan) superclass dariC
superclassM
. Saya tidak berpikir bahwa Cinclude
bekerja melalui pewarisan, saya pikir itu substitusi teks / leksikal sederhana.Jika Anda menggunakan modul, itu berarti Anda membawa semua metode ke kelas Anda. Jika Anda
extend
kelas dengan modul, itu berarti Anda "memasukkan" metode modul sebagai metode kelas . Jika Andainclude
kelas dengan modul, itu berarti Anda "memasukkan" metode modul sebagai metode instan .EX:
B.say
=> metode tidak jelas 'katakan' untuk B: KelasB.new.say
=> ini adalah modul AC.say
=> ini adalah modul AC.new.say
=> metode tidak jelas 'katakan' untuk C: Kelassumber
require
daninclude
apa.Dari buku Metaprogramming Ruby,
sumber
Ruby
require
lebih mirip "sertakan" dalam bahasa lain (seperti C). Ini memberitahu Ruby bahwa Anda ingin membawa konten file lain . Mekanisme serupa dalam bahasa lain adalah:using <namespace>
direktif dalam C # .import <package>
di Jawa .Ruby
include
adalah mekanisme pewarisan berorientasi objek yang digunakan untuk mixin .Ada penjelasan yang bagus di sini :
Penekanan ditambahkan.
sumber
Pernahkah Anda mencoba
require
modul? Apa hasilnya? Coba saja:Modul tidak diperlukan, hanya termasuk!
sumber
TypeError
) jika kataModule
tersebut diubahClass
.Dari Pemrograman Ruby 1.9
sumber
Sertakan Ketika Anda Sertakan modul ke dalam kelas Anda seperti yang ditunjukkan di bawah ini, seolah-olah Anda mengambil kode yang ditentukan dalam modul dan memasukkannya ke dalam kelas, di mana Anda 'memasukkannya'. Ini memungkinkan perilaku 'mixin'. Ini digunakan untuk MENINGGALKAN kode Anda untuk menghindari duplikasi, misalnya, jika ada beberapa kelas yang akan membutuhkan kode yang sama dalam modul.
Memuat Metode memuat hampir seperti metode yang disyaratkan kecuali tidak melacak apakah perpustakaan telah dimuat atau tidak. Jadi mungkin untuk memuat pustaka beberapa kali dan juga saat menggunakan metode pemuatan, Anda harus menentukan ekstensi “.rb” dari nama file pustaka.
Wajib Metode mengharuskan memungkinkan Anda memuat pustaka dan mencegahnya dimuat lebih dari sekali. Metode yang disyaratkan akan mengembalikan 'false' jika Anda mencoba memuat pustaka yang sama setelah pertama kali. Metode yang diperlukan hanya perlu digunakan jika pustaka yang Anda muat didefinisikan dalam file terpisah, yang biasanya merupakan kasus.
Anda dapat memilih ini http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
sumber
Berikut adalah beberapa perbedaan mendasar antara keharusan dan termasuk:
Memerlukan:
Termasuk:
sumber
Ini akan mengembalikan bolean benar / salah
Nama yang dilewatkan sebagai parameter ke keharusan, ruby akan mencoba menemukan file sumber dengan nama itu di jalur muat Anda. Metode yang disyaratkan akan mengembalikan 'false' jika Anda mencoba memuat pustaka yang sama setelah pertama kali. Metode yang diperlukan hanya perlu digunakan jika pustaka yang Anda muat didefinisikan dalam file terpisah. Jadi itu melacak apakah perpustakaan itu sudah dimuat atau tidak.
Misalkan jika Anda memiliki beberapa metode yang perlu Anda miliki dalam dua kelas yang berbeda. Maka Anda tidak harus menulisnya di kedua kelas. Alih-alih apa yang dapat Anda lakukan adalah, tentukan dalam modul. Dan kemudian termasuk modul ini di kelas lain. Ini disediakan oleh Ruby hanya untuk memastikan prinsip KERING. Ini digunakan untuk KERING kode Anda untuk menghindari duplikasi
sumber
Termasuk
Memerlukan
Jadi itu melacak apakah perpustakaan itu sudah dimuat atau tidak. Anda juga tidak perlu menentukan ekstensi ".rb" dari nama file perpustakaan. Berikut adalah contoh cara menggunakan yang diperlukan. Tempatkan metode yang diperlukan di bagian paling atas file ".rb" Anda:
Beban
Memperpanjang
sumber
'Load'- menyisipkan konten file. (Parse file setiap kali file dipanggil)
'Membutuhkan'- memasukkan konten yang diurai file. (File diurai sekali dan disimpan dalam memori)
'Sertakan' - termasuk modul ke dalam kelas dan dapat menggunakan metode di dalam modul sebagai metode instance kelas
'Perluas' - termasuk modul ke dalam kelas dan dapat menggunakan metode di dalam modul sebagai metode kelas
sumber