私は 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)
ベストアンサー1
ブロックと Proc に関するコメントは、Ruby ではより一般的であるという点で正しいです。ただし、必要に応じてメソッドを渡すこともできます。method
メソッドを取得して呼び出すには、.call
を呼び出します。
def weightedknn( data, vec1, k = 5, weightf = method(:gaussian) )
...
weight = weightf.call( dist )
...
end