私は Ruby を学ぼうとしており、書籍「Programming Collective Intelligence」に記載されている Python アルゴリズムを Ruby で実装したいと考えています。
第 8 章で、著者は Python では機能するように見えるメソッドをパラメータとして渡しましたが、Ruby では機能しませんでした。
私は次の方法を使用しています:
def gaussian(dist, sigma=10.0)
foo
end
別のメソッドを使用してこれを呼び出したいとします。
def weightedknn(data, vec1, k = 5, weightf = gaussian)
foo
weight = weightf(dist)
foo
end
しかし、エラーが発生しました:
ArgumentError: wrong number of arguments (0 for 1)
ブロックと Proc について言及しているコメントは、Ruby ではより一般的であるという点で正しいです。ただし、必要に応じてメソッドを渡すこともできます。 Method を呼び出してメソッドを取得し、 .call を呼び出してそれを呼び出します。
def weightedknn( data, vec1, k = 5, weightf = method(:gaussian) )
...
weight = weightf.call( dist )
...
end