モジュール関数のプライベート ヘルパー メソッドを作成しようとしていますが、役に立ちません。私が見逃している非常に単純なものがあるように感じます。
よりわかりやすい使用例で更新された例:
module FancyScorer
module_function
def score(ary)
scores = []
ary.each_slice(2).with_index do |slice, i|
scores <<
case i % 2
when 0
score_eventh(ary)
else
score_oddth(ary)
end
end
scores.inject(:+)
end
private
def score_eventh(ary)
ary.inject(:+) / (ary.size - 1)
end
def score_oddth(ary)
ary.inject(:*) / (ary.size - 1)
end
end
FancyScorer.score([1,2,3,4])
# => `block in score_curiously': undefined method `score_eventh'
# for FancyScorer:Module (NoMethodError)
注: プライベート メソッドはプライベートのままにする必要があります。
ユースケースは次のとおりです。さまざまなスコアリング手法を含むいくつかのモジュールがFancyScorer
ありSimpleScorer
ますComplexScorer
。これらの関数は個別にテストされscore
、異なるクラスのメソッドを作成するために使用されます。例えば:
class A
...
def score
FancyScorer.score(metrics) + 2*SimpleScorer.score(metrics)
end
end
class B
...
def score
0.5*FancyScorer.score(metrics) + 2*SimpleScorer.score(metrics[0,3]) + ComplexScorer.score(metrics)
end
end
ユースケースが提供されていない前の例:
module Party
module_function
def pooper
enjoy
end
private
def enjoy
puts "Wahoo!"
end
end
Party.pooper
# => NameError: undefined local variable or method `enjoy' for Party:module
# from (party): in `pooper`