JavaScriptのexportとimportっぽいものをRubyで書いてみた

はじめに

とある勉強会で以前聞いた「JavaScriptのimportとexportみたいなのがRubyで出来ないか?」という話をもとにRubyでやってみた記事です。

実際のコード

module Klass
  @@klasses = {}
  def export(*klasses)
    klasses.each{
      @@klasses[_1.to_s.to_sym] = _1
    }
  end

  def import
    @@klasses
  end
end

class C1
  def self.value
    42
  end
end

class C2
  def self.value
    21
  end
end

include Klass

export C1, C2

import in { C1: c1, C2: c2 }

p c1.value
# => 42
p c2.value
# => 21

Klassというモジュールの中にexportimportというメソッドをそれぞれ定義しています。
exportメソッドでは複数のクラス(定数)を受け取り、それをクラス変数に保存させています。

で、保存したクラスをimportでメソッドで全て返し、パターンマッチでマッチしたクラスだけを変数として受け取っています。

こんな感じでとりあえず書けそう

ただ、exportでエクスポートしたクラスがどんどん同じ変数に格納されていくのでJavaScriptのそれとはちょっと挙動が違うので意図したものかは微妙かもしれないけど……