klassbiasanya digunakan untuk memberi nama variabel yang menampung Classobjek (ingat kelas adalah objek juga), seperti pada klass = String. Dapatkah Anda memberikan sumber dari mana Anda pernah melihatnya untuk penjelasan yang lebih dalam?
Chubas
5
Tidak, saya tidak ingin memberikan sumber tunggal karena saya tidak ingin dijelaskan seperti itu. Saya ingin gambaran yang lebih besar tentang ini
pertengahan
5
Kadang-kadang, orang menggunakan clazzdaripada klass(misalnya, dalam buku "Metaprogramming Ruby").
Andrew Grimm
2
Di TV Tropes, ini disebut "Xtreme Kool Letterz" (tidak ada tautan - tidak aman produktivitas).
Andrew Grimm
Jawaban:
188
classadalah kata kunci yang digunakan untuk mendefinisikan kelas baru. Karena ini adalah kata kunci yang dipesan, Anda tidak dapat menggunakannya sebagai nama variabel. Anda tidak dapat menggunakan kata kunci Ruby apa pun sebagai nama variabel, jadi Anda tidak akan dapat memiliki variabel bernama defatau moduleatau ifatau end, dll - classtidak berbeda.
Misalnya, pertimbangkan hal berikut:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Mencoba menjalankan ini menghasilkan kesalahan, karena Anda tidak dapat menggunakan classsebagai nama variabel.
Untuk memperbaikinya, kami akan menggunakan pengenal klasssebagai gantinya. Ini tidak istimewa, tetapi secara konvensional digunakan sebagai nama variabel saat Anda berurusan dengan nama kelas atau kelas. Secara fonetik sama, tetapi karena ini bukan kata kunci yang dipesan, Ruby tidak memiliki masalah dengannya.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Anda dapat menggunakan nama variabel (tidak dicadangkan) di sana, tetapi komunitas telah menggunakannya klass. Itu tidak memiliki sihir khusus - itu hanya berarti "Saya ingin menggunakan nama 'kelas' di sini, tetapi saya tidak bisa, karena ini adalah kata kunci yang dipesan".
Di samping catatan, karena Anda salah mengetik beberapa kali, perlu diperhatikan bahwa di Ruby, kasus penting. Token yang dimulai dengan huruf kapital adalah konstanta. Melalui beliung :
Nama konstanta dimulai dengan huruf besar diikuti dengan karakter nama. Nama kelas dan nama modul adalah konstanta, dan mengikuti konvensi penamaan yang konstan. Sesuai ketentuan, variabel konstan biasanya dieja menggunakan huruf besar dan garis bawah.
Jadi, ejaan yang benar adalah classdan klass, bukan Classdan Klass. Yang terakhir akan menjadi konstanta, dan keduanya Classdan Klassmerupakan nama konstanta yang valid, tetapi saya akan merekomendasikan agar tidak menggunakannya untuk tujuan kejelasan.
Saya pikir penggunaan klasssebagai variabel lokal berasal dari beliung - mereka menggunakan nama itu dalam beberapa contoh, tepat untuk alasan yang Anda jelaskan di sini.
Ken Bloom
Ini harus menerapkan versi ruby lama. Dengan Ruby 1.9.3 saya menggunakanobject_instance.class.name == 'Object'
Augustin Riedinger
Tidak, itu masih akurat. Kelas dari Object.new adalah Object, tetapi kelas dari Object adalah Class.
Chris Heald
22
klassjuga merupakan Rails (atau lebih tepatnya ActiveRecord) metode . Ini digunakan untuk mendapatkan kelas asosiasi.
Seperti yang dinyatakan dalam konten tertaut:
classAuthor<ActiveRecord::Base
has_many :books
endAuthor.reflect_on_association(:books).klass
# => Book
Salah satunya adalah nama kelas dan yang lainnya hanyalah konstanta tak terdefinisi secara default. Dan untuk pasangan Anda lebih cenderung melihat, classdan klass, yang pertama adalah kata kunci untuk mendefinisikan kelas sedangkan yang terakhir hanya pengenal (seperti string karakter lainnya). Ini digunakan ketika Anda ingin menulis kata "class" tetapi tidak bisa karena ini adalah kata kunci yang dipesan.
Apa gunanya maksud saya kenapa / bagaimana menggunakannya, biasanya digunakan untuk apa?
pertengahan
3
Kelas @ Sam adalah kata kunci yang disediakan untuk mendefinisikan kelas. Jadi, jika Anda ingin menangani sesuatu dengan kelas generik (seperti metaprogramming), Anda tidak dapat menulis class = Kernel.const_get(class_name). Tapi Anda bisa menulis klass = Kernel.const_get(class_name), dan itu digunakan untuk mewakili "kelas".
Thiago Silveira
2
Intinya adalah Anda tidak dapat menggunakan kata kunci 'class' untuk berarti 'class' ... karena ini adalah kata yang dicadangkan (logika melingkar, saya tahu) sehingga kata 'klass' diganti. Ini adalah idiom umum di banyak bahasa lain, misalnya Java dan C #.
Scott
sehingga Anda dapat menetapkan kelas secara dinamis? Klass = object.class; Klass. Baru - kira-kira seperti itu
tengah
3
@ Sam: Menggunakan Klassuntuk itu akan menjadi pilihan yang buruk, karena pengenal yang dimulai dengan huruf besar adalah konstanta, jadi Anda hanya dapat menyetelnya sekali. Tapi ya, itu gambaran umumnya.
klass
biasanya digunakan untuk memberi nama variabel yang menampungClass
objek (ingat kelas adalah objek juga), seperti padaklass = String
. Dapatkah Anda memberikan sumber dari mana Anda pernah melihatnya untuk penjelasan yang lebih dalam?clazz
daripadaklass
(misalnya, dalam buku "Metaprogramming Ruby").Jawaban:
class
adalah kata kunci yang digunakan untuk mendefinisikan kelas baru. Karena ini adalah kata kunci yang dipesan, Anda tidak dapat menggunakannya sebagai nama variabel. Anda tidak dapat menggunakan kata kunci Ruby apa pun sebagai nama variabel, jadi Anda tidak akan dapat memiliki variabel bernamadef
ataumodule
atauif
atauend
, dll -class
tidak berbeda.Misalnya, pertimbangkan hal berikut:
Mencoba menjalankan ini menghasilkan kesalahan, karena Anda tidak dapat menggunakan
class
sebagai nama variabel.Untuk memperbaikinya, kami akan menggunakan pengenal
klass
sebagai gantinya. Ini tidak istimewa, tetapi secara konvensional digunakan sebagai nama variabel saat Anda berurusan dengan nama kelas atau kelas. Secara fonetik sama, tetapi karena ini bukan kata kunci yang dipesan, Ruby tidak memiliki masalah dengannya.Output, seperti yang diharapkan
Anda dapat menggunakan nama variabel (tidak dicadangkan) di sana, tetapi komunitas telah menggunakannya
klass
. Itu tidak memiliki sihir khusus - itu hanya berarti "Saya ingin menggunakan nama 'kelas' di sini, tetapi saya tidak bisa, karena ini adalah kata kunci yang dipesan".Di samping catatan, karena Anda salah mengetik beberapa kali, perlu diperhatikan bahwa di Ruby, kasus penting. Token yang dimulai dengan huruf kapital adalah konstanta. Melalui beliung :
Jadi, ejaan yang benar adalah
class
danklass
, bukanClass
danKlass
. Yang terakhir akan menjadi konstanta, dan keduanyaClass
danKlass
merupakan nama konstanta yang valid, tetapi saya akan merekomendasikan agar tidak menggunakannya untuk tujuan kejelasan.sumber
Class
nama konstanta yang valid, tetapi juga nama yang masih ada! (Ini kelas Kelas)klass
sebagai variabel lokal berasal dari beliung - mereka menggunakan nama itu dalam beberapa contoh, tepat untuk alasan yang Anda jelaskan di sini.object_instance.class.name == 'Object'
klass
juga merupakan Rails (atau lebih tepatnya ActiveRecord) metode . Ini digunakan untuk mendapatkan kelas asosiasi.Seperti yang dinyatakan dalam konten tertaut:
sumber
klass
danclazz
danclasz
dan sejenisnya adalah salah eja kreatif yang digunakan untuk menyiasati kata yang sudah dipesanclass
.Ini akan menjadi jauh lebih sedikit menggelegar pada mata untuk menggunakan
class1
ataucl
atauclassX
atau sesuatu daripada kesalahan ejaan disengaja.sumber
Salah satunya adalah nama kelas dan yang lainnya hanyalah konstanta tak terdefinisi secara default. Dan untuk pasangan Anda lebih cenderung melihat,
class
danklass
, yang pertama adalah kata kunci untuk mendefinisikan kelas sedangkan yang terakhir hanya pengenal (seperti string karakter lainnya). Ini digunakan ketika Anda ingin menulis kata "class" tetapi tidak bisa karena ini adalah kata kunci yang dipesan.sumber
class = Kernel.const_get(class_name)
. Tapi Anda bisa menulisklass = Kernel.const_get(class_name)
, dan itu digunakan untuk mewakili "kelas".Klass
untuk itu akan menjadi pilihan yang buruk, karena pengenal yang dimulai dengan huruf besar adalah konstanta, jadi Anda hanya dapat menyetelnya sekali. Tapi ya, itu gambaran umumnya.