Próbuję trochę pomieszać z Ruby. Dlatego próbuję implementować algorytmy (podane w Pythonie) z książki "Programowanie Kolektywnej Inteligencji" Ruby.Przekazywanie metody jako parametru w Ruby
W rozdziale 8 autor podaje metodę a jako parametr. To wydaje się działać w Pythonie, ale nie w Ruby.
Mam tu metoda
def gaussian(dist, sigma=10.0)
foo
end
i chcesz się połączyć to z innej metody
def weightedknn(data, vec1, k = 5, weightf = gaussian)
foo
weight = weightf(dist)
foo
end
Wszystko co mam to błąd
ArgumentError: wrong number of arguments (0 for 1)
Myślę, że druga opcja jest najlepszą opcją (to znaczy, używając Object.send()), wadą jest to, że musisz użyć klasy dla wszystkich (tak powinieneś zrobić w OO i tak :)). Jest bardziej SUCHA niż przejście bloku (Proc) przez cały czas, a nawet możesz przekazywać argumenty za pomocą metody wrappera. –
Jako dodatek, jeśli chcesz wykonać 'foo.bar (a, b)' przy wysyłaniu, jest to 'foo.send (: bar, a, b)'. Operator splat (*) pozwala ci na zrobienie 'foo.send (: bar, * [a, b])' jeśli znajdziesz żądaną arbitralną tablicę argumentów - zakładając, że metoda słupkowa może je pochłonąć – xxjjnn