クラスメソッド
クラスメソッドとはクラスからオブジェクトを生成せずに直に呼び出すことができすメソッドです。
以下は3つのクラスメソッドが定義されています。
まずはselfを先頭に記載する方法で「first_method」を記載してあります。
複数をクラスメソッドとして記載する場合は「class << self」と「end」で挟んで宣言する方法で、「second_method」と「third_method」が記載してあります。
class Foo
def self.first_method
puts '一つ目'
end
class << self
def second_method
puts '二つ目'
end
def third_method
puts '三つ目'
end
end
end
Foo.first_method
Foo.second_method
Foo.third_method
->
一つ目
二つ目
三つ目
#ただしオブジェクトから呼び出すことはできない
Foo.new.foo
->
NoMethodError: undefined method `foo' for #<Foo:0x00007fdcf103cac0>
クラス変数
クラス変数はそのクラスのインスタンス全てで共有される変数です。
以下のようにクラス変数はクラス内に「@@」を先頭につけて定義します。
インスタンスメソッドからでもクラスメソッドからでもアクセスすることができ、異なるオブジェクトであっても同じクラスであれば値が共有されます。
Foo.first_method
Foo.second_method
Foo.third_method
class Num
@@num = 1
def increment
@@num += 1
end
def decrement
@@num -= 1
end
def num
puts @@num
end
def self.num
puts @@num
end
end
foo = Num.new
foo.num
foo.increment
foo.num
bar = Num.new
bar.num
bar.increment
bar.num
bar.decrement
bar.num
->
1
2
2
3
2
コメント