比如这个代码
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方法呢?
last_updated_at
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
self は現在のクラスを指すため、self. が追加されていない場合、この定義メソッドはインスタンス メソッドを定義します。 self 指向当前 class,所以这种定义方法会定义出 class 方法(class method),如果不加 self. 就会定义出实例方法(instance method)。
self
self.
这种 self.
Rubyオブジェクトが呼び出せるメソッドは2種類あります。 1 つの型はオブジェクトのクラスで定義され、インスタンス メソッドと呼ばれます (
その後、Category のインスタンスはこのメソッドを呼び出すことができますが、Category 自体は呼び出すことができません
もう 1 つのタイプはシングルトン メソッドと呼ばれます。これは 1 つのオブジェクトによってのみ呼び出すことができ、オブジェクトのクラスや、そのオブジェクトと同じクラスに属する他のオブジェクトによって呼び出すことはできません。シングルトンメソッドは次のように定義されます
この定義の後は、category1 オブジェクトのみが last_updated_at メソッドを呼び出すことができます
Ruby クラスもオブジェクトであり、
このように、Category のみが last_updated_at メソッドを呼び出すことができますが、そのインスタンス、他のクラス、正確には他のオブジェクトは呼び出すことができません
Categoryクラスの定義内(メソッドの外)では、selfはCategory自体を参照するため、
は
これはあなたの質問で定義されたメソッドです。もう分かりましたか?本質的に、これはカテゴリのシングルトン メソッドであり、カテゴリはクラスです。クラスのシングルトン メソッドは、クラスのクラス メソッドとも呼ばれ、クラス自体によってのみ呼び出すことができます。
クラスメソッドはシングルトンメソッドであることに注意してください。それ以外には特別なことはありません。インスタンス メソッドがオブジェクトが属するクラスによって保持されるのと同じように、シングルトン メソッドもオブジェクトの固有クラスと呼ばれるものによって保持されます。 eigenclass についてはさらに多くの知識があるため、ここでは触れません。それについては記事の中でお話します。
self を追加してクラスメソッドを定義します。それ以外の場合はインスタンスメソッドになります
クラスメソッドを定義することもできます
self
は現在のクラスを指すため、self.
が追加されていない場合、この定義メソッドはインスタンス メソッドを定義します。self
指向当前 class,所以这种定义方法会定义出 class 方法(class method),如果不加self.
就会定义出实例方法(instance method)。这种
このself.
self.
の書き方は次と同等です: 🎜 リーリーRubyオブジェクトが呼び出せるメソッドは2種類あります。
など) リーリー1 つの型はオブジェクトのクラスで定義され、インスタンス メソッドと呼ばれます (
その後、Category のインスタンスはこのメソッドを呼び出すことができますが、Category 自体は呼び出すことができません
リーリーもう 1 つのタイプはシングルトン メソッドと呼ばれます。これは 1 つのオブジェクトによってのみ呼び出すことができ、オブジェクトのクラスや、そのオブジェクトと同じクラスに属する他のオブジェクトによって呼び出すことはできません。シングルトンメソッドは次のように定義されます
リーリーこの定義の後は、category1 オブジェクトのみが last_updated_at メソッドを呼び出すことができます
リーリーRuby クラスもオブジェクトであり、
などの独自のシングルトン メソッドを定義することもできます。 リーリーこのように、Category のみが last_updated_at メソッドを呼び出すことができますが、そのインスタンス、他のクラス、正確には他のオブジェクトは呼び出すことができません
リーリーCategoryクラスの定義内(メソッドの外)では、selfはCategory自体を参照するため、
リーリーは
で置き換えることができます リーリーこれはあなたの質問で定義されたメソッドです。もう分かりましたか?本質的に、これはカテゴリのシングルトン メソッドであり、カテゴリはクラスです。クラスのシングルトン メソッドは、クラスのクラス メソッドとも呼ばれ、クラス自体によってのみ呼び出すことができます。
クラスメソッドはシングルトンメソッドであることに注意してください。それ以外には特別なことはありません。インスタンス メソッドがオブジェクトが属するクラスによって保持されるのと同じように、シングルトン メソッドもオブジェクトの固有クラスと呼ばれるものによって保持されます。 eigenclass についてはさらに多くの知識があるため、ここでは触れません。それについては記事の中でお話します。
self を追加してクラスメソッドを定義します。それ以外の場合はインスタンスメソッドになります
クラスメソッドを定義することもできます
リーリー