Rubyでメソッドをパラメータとして渡す 質問する

Rubyでメソッドをパラメータとして渡す 質問する

私は 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

おすすめ記事