はじめに
とある勉強会で以前聞いた「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
というモジュールの中にexport
とimport
というメソッドをそれぞれ定義しています。
export
メソッドでは複数のクラス(定数)を受け取り、それをクラス変数に保存させています。
で、保存したクラスをimport
でメソッドで全て返し、パターンマッチでマッチしたクラスだけを変数として受け取っています。
こんな感じでとりあえず書けそう
ただ、export
でエクスポートしたクラスがどんどん同じ変数に格納されていくのでJavaScriptのそれとはちょっと挙動が違うので意図したものかは微妙かもしれないけど……