Rumah > Soal Jawab > teks badan
比如这个代码
class Category < ActiveRecord::Base
...
def self.last_updated_at
order('updated_at desc').limit(1).pluck(:updated_at).first.to_i
end
...
end
为什么不直接定义last_updated_at
方法呢?
PHP中文网2017-04-22 09:01:47
self
menunjuk ke kelas semasa, jadi kaedah takrifan ini akan mentakrifkan kaedah kelas Jika self.
tidak ditambah, kaedah contoh akan ditakrifkan.
Cara penulisan ini self.
bersamaan dengan:
def Category.last_updated_at
...
end
天蓬老师2017-04-22 09:01:47
Terdapat dua jenis kaedah yang boleh dipanggil oleh objek delima.
Satu jenis ditakrifkan dalam kelas objek, dipanggil kaedah contoh, seperti
def last_updated_at
#blahblah
end
Kemudian contoh Kategori boleh memanggil kaedah ini, tetapi Kategori itu sendiri tidak boleh
category1=Category.new
category2=Category.new
category1.last_updated_at #legal
category2.last_updated_at #legal
Category.last_updated_at #illegal
Jenis lain dipanggil kaedah tunggal, yang hanya boleh dipanggil oleh satu objek, bukan kelas objek, atau objek lain yang tergolong dalam kelas yang sama dengan objek. Kaedah tunggal ditakrifkan seperti berikut
#category1=Category.new
def category1.last_updated_at
#blahblah
end
Selepas definisi ini, hanya objek category1 boleh memanggil kaedah last_updated_at
category1.last_updated_at #legal
category2=Category.new
category2.last_updated_at #illegal
Category.last_updated_at #illegal
Kelas Ruby juga merupakan objek, dan juga boleh menentukan kaedah tunggal mereka sendiri, seperti
def Category.last_udpated_at
#blahblah
end
Dengan cara ini, hanya Kategori boleh memanggil kaedah last_updated_at, tetapi bukan kejadiannya, mahupun kelas lain, atau mana-mana objek lain secara tepat
Category.last_updated_at #legal
category=Category.new
category.last_updated_at #illegal
Di dalam definisi kelas Kategori (di luar kaedah), diri merujuk kepada Kategori itu sendiri, jadi
def Category.last_udpated_at
#blahblah
end
boleh digantikan dengan
def self.last_udpated_at
#blahblah
end
Ini ialah kaedah yang ditakrifkan dalam soalan anda. Adakah anda faham sekarang? Pada asasnya, ia adalah kaedah tunggal bagi Kategori, dan Kategori ialah kelas Kaedah tunggal kelas juga dipanggil kaedah kelas kelas dan hanya boleh dipanggil oleh kelas itu sendiri.
Perlu diingatkan bahawa kaedah kelas ialah kaedah tunggal, tetapi ia adalah kaedah tunggal kelas Selain daripada itu, tiada apa yang istimewa mengenainya. Sama seperti kaedah instance dipegang oleh kelas yang mempunyai objek, kaedah singleton juga dipegang oleh sesuatu yang dipanggil eigenclass objek. Terdapat lebih banyak pengetahuan tentang eigenclass, jadi saya tidak akan menyebutnya di sini. Saya akan bercakap mengenainya dalam artikel.
迷茫2017-04-22 09:01:47
Tambah diri untuk mentakrifkan kaedah kelas, jika tidak, ia adalah kaedah contoh
Tentukan kaedah kelas juga boleh
class << self
def last_updated_at
order('updated_at desc').limit(1).pluck(:updated_at).first.to_i
end
end