hacca8

Rubyのコロンについて

Rubyのコロンの扱いについて確認します。

: (コロン1つ)

シンボル

:symbol
{ symbol: hash }
instance.method(:symbol)

コロン1つを前に付けると、シンボルを表します。
また、ハッシュのキーの後ろに付けると、キーがシンボルになります。
使い分けとしてはデータとして扱わないもの(ハッシュのキーなど)をシンボルにしたりします。

シンボルは immutable(変更不可)であるため、基本的には文字列などよりもメモリ使用量が少なく、高速に処理されます

  • 文字列とシンボルのID比較
p 'abc'.object_id
p 'abc'.object_id
p :abc.object_id
p :abc.object_id

# 60
# 80
# 1042588
# 1042588

:: (コロン2つ)

定数やモジュール、クラスの呼び出し

module Hoge
  class Fuga
    CONST = '定数'
    def self.method
      puts 'ねんむい'
    end
    def method
      puts 'ねんむい'
    end
  end
end

puts Hoge::Fuga::CONST
# 定数
puts Hoge::Fuga.CONST
# error
Hoge::Fuga.method
# ねむい
Hoge::Fuga.new.method
# ねんむい

絶対パスを指定する

class Hoge
  def method
    puts 'FIRST'
  end
end

module Fuga
  class Hoge
    def method
      puts 'SECOND'
    end

    def self.call
      ::Hoge.new.method
      Hoge.new.method
    end
  end
end

Fuga::Hoge.call

# FIRST
# SECOND