Ruby で static 関数のようなものを定義したかった
C 言語の static 関数ような『そのファイルのみで参照できる関数』を Ruby でも定義したかったのですが、そういう機能はないみたいなのでちょっと考えてみました。
[コード]
def static_def name, &block name = caller.first[/([^:]+):/, 1] + name.to_s define_method(name, block) end def static_send name, *args name = caller.first[/([^:]+):/, 1] + name.to_s send(name, *args) end static_def(:homu){ |n| puts "homu:#{n}" } static_send :homu, 10 # => homu:10
コールスタックから呼び出された箇所のファイル名を起点にしてメソッドの定義・呼び出しを行ってます。
方向性としてはこれでよさそうなのでもうちょい使い勝手をよくしてみたい。