ちょっと例が悪いですが、自分用メモ。
↓こんなのがRubyで書きたかった。
const filepath = (() => {
return "hoge/moge/huga";
})();
別に普通に定義しても良いですが、処理部がごちゃごちゃしてくる場合は、変数の定義も処理部と切り離したいと思い、考えてみました。
class Hoge
def initialize
@root = root
end
def filepath(path)
File.join(@root.call, path)
end
private
def root
# pathへの代入は初期化の@rootへ代入された時のみ
path = "hoge/moge/huga"
-> { path }
end
end
hoge = Hoge.new
p hoge.filepath("a") # => "hoge/moge/huga/a"
p hoge.filepath("i") # => "hoge/moge/huga/i"
p hoge.filepath("u") # => "hoge/moge/huga/u"
p hoge.filepath("e") # => "hoge/moge/huga/e"
p hoge.filepath("o") # => "hoge/moge/huga/o"
この例のroot
メソッドで定義しているpath
は直書きですが、なにかの処理結果をpath
に格納して使いまわしたい場合は、何度も処理を走らせる必要がないので、いい感じ。