#まえがき
Railsを使っていれば、誰でも以下の記述を見たことあると思います。
class ApplicationRecord < ActiveRecord::Base
#以下省略
ApplicationRecord
にActiveRecord::Base
を継承していますよね。
なんにも変わったことありませんね。
・・・
・・
・
って、え、え、ちょっと待って下さい。
なんですか、::
って!?!?!?
怖い!!!
ということで、Ruby初学者である私が、::
について調べたことを健忘録として残します。
#結論
::
は2つの特徴があります。
1.名前空間の絶対パスを指定する
module Hoge
class Fuga
def self.fuga
p "fugaです"
end
end
end
Hoge::Fuga.fuga #=> "fugaです"
Fuga.fuga #エラー
#Fugaクラスを作成
class Fuga
def self.fuga
p "fugaです"
end
end
Hoge::Fuga.fuga #=> "fugaです"
Fuga.fuga #=> "fugaです"
2.定数のスコープ演算子
クラスまたはモジュールで定義された定数をスコープ外部から参照するためには::
を使います。
class Hoge
FUGA = "FUGA" #定数FUGA
p FUGA #=> "FUGA"
end
#スコープ外から定数FUGAを出力する。
p Hoge::FUGA #=> "FUGA"
また、Rubyではクラスやモジュールも定数として扱われます。
例えばHogeクラスを生成した時、Hogeクラスオブジェクトは、Hogeという名前の定数に代入されています。
結局、ActiveRecord::Baseの::
は??
ActiveRecord::Baseの::
はActiveRecordモジュール内のBaseクラスを指しています!!
ActiveRecordにネストされたBaseクラスなんですね〜。
簡単に書くと以下の通りです。
module ActiveRecord
#省略
class Base
#省略
end
#省略
end
ActiveRecord::Baseの正式な中身は以下の通りです。
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb
ActiveRecordの機能についてはこの方が深くまとめております。
Rails: ActiveRecord::Baseメソッドのまとめ
#参考
Ruby公式リファレンス 変数と定数
https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html#const
Railsガイド Active Record の基礎
https://railsguides.jp/active_record_basics.html