LoginSignup
5
0

More than 3 years have passed since last update.

【Ruby】演算子"::(コロンコロン)"【定数】

Last updated at Posted at 2020-12-15

まえがき

Railsを使っていれば、誰でも以下の記述を見たことあると思います。

models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
#以下省略

ApplicationRecordActiveRecord::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クラスなんですね〜。
簡単に書くと以下の通りです。

active_record/base.rb
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

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0