Estoy tratando de perder el tiempo con Ruby. Por lo tanto, intento implementar los algoritmos (dados en Python) del libro "Programming Collective Intelligence" Ruby.Pasar un método como parámetro en Ruby
En el capítulo 8, el autor pasa un método a como parámetro. Esto parece funcionar en Python pero no en Ruby.
Tengo aquí el método
def gaussian(dist, sigma=10.0)
foo
end
y quieren llamar a esto con otro método
def weightedknn(data, vec1, k = 5, weightf = gaussian)
foo
weight = weightf(dist)
foo
end
Todo lo que tengo es un error
ArgumentError: wrong number of arguments (0 for 1)
Creo que la segunda opción es la mejor opción (es decir, usar Object.send()), el inconveniente es que necesitas usar una clase para todo (que es como debes hacerlo en OO de todos modos :)). Es más SECO que pasar un bloque (Proc) todo el tiempo, e incluso se pueden pasar argumentos a través del método de envoltura. –
Como una adición, si desea hacer 'foo.bar (a, b)' con send, es 'foo.send (: bar, a, b)'. El operador splat (*) le permite hacer 'foo.send (: bar, * [a, b])' en caso de que desee tener una matriz de argumentos arbitrariamente alargada, suponiendo que el método de la barra pueda absorberlos – xxjjnn