こんにちは。Tomoyuki(@tomoyuki65)です。
Rubyのクラスにはインスタンス変数やクラス変数ってありますよね。
最近勉強していて知ったんですが、クラスにはクラスインスタンス変数というのもあるんです。
この記事では、そんなクラスインスタンス変数について解説します。
クラスインスタンス変数とは?
クラスインスタンス変数とは、クラス自身のインスタンス変数です。
クラスインスタンス変数の書き方は、以下のようにクラス構文の直下に@で始まる変数を定義します。
class # クラスインスタンス変数を定義 @hello = 'Hello' end
クラスインスタンス変数は、クラス構文の直下やクラスメソッドの内部で操作することができます。
例として、以下のプログラムを実行してみて下さい。
class Say_hello
# クラス構文の直下にクラスインスタンス変数を定義
@hello = 'Hello'
puts "クラス構文の直下で操作:#{@hello}"
def self.call_hello
puts "クラスメソッドの内部で操作:#{@hello}"
end
end
# クラスメソッドを実行
Say_hello.call_hello
クラスメソッドの内部で操作:Hello
実行結果の通り、クラスインスタンス変数はクラス構文の直下やクラスメソッドの内部で操作できます。
クラスインスタンス変数の特徴は?
クラスインスタンス変数は、クラスの継承の際にスーパークラスとサブクラスで別々の値を保持します。
例として、以下のプログラムを実行してみて下さい。
class Say_hello
# クラス構文の直下にクラスインスタンス変数を定義
@hello = 'Hello'
def self.call_hello
puts "クラスインスタンス変数を表示:#{@hello}"
end
end
# クラスの継承
class Say_sub < Say_hello
# クラス構文の直下にクラスインスタンス変数を定義
@hello = 'こんにちは。'
end
# スーパークラスのクラスメソッドを実行
Say_hello.call_hello
# サブクラスのクラスメソッドを実行
Say_sub.call_hello
クラスインスタンス変数を表示:こんにちは。
実行結果の通り、クラスインスタンス変数はスーパークラスとサブクラスで同じ名前でも別の変数になります。
つまり、クラスインスタンス変数はスーパークラスとサブクラスで変数の内容が共有されません。
まとめ
- クラスインスタンス変数とは、クラス自身のインスタンス変数
- クラスインスタンス変数の書き方は、クラス構文の直下に@から始まる変数を定義する
- クラスインスタンス変数は、クラス構文の直下やクラスメソッドの内部から操作できる
- クラスインスタンス変数は、クラスの継承の際にスーパークラスとサブクラスで変数の内容が共有されない
- 関連記事
Tomoyuki
最新記事 by Tomoyuki (全て見る)
- 【スト6】モダンキャミィの初心者向けコンボまとめ【STREET FIGHTER 6(ストリートファイター6)】 - 2024年11月10日
- モンハンワイルズでおすすめのオプション設定まとめ【Monster Hunter Wilds】 - 2024年11月4日
- モンハンワイルズでおすすめのグラフィック設定まとめ【Monster Hunter Wilds】 - 2024年11月2日
コメントを残す