首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中将方法作为参数传递

在Ruby中将方法作为参数传递
EN

Stack Overflow用户
提问于 2009-02-07 00:02:01
回答 6查看 109.4K关注 0票数 137

我正试着和Ruby打成一片。因此,我尝试实现“编程集体智能”Ruby一书中的算法(在Python中给出)。

在第八章中,作者传递了一个方法a作为参数。这似乎适用于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)
EN

回答 6

Stack Overflow用户

发布于 2009-02-07 15:50:16

引用块和Procs的注释是正确的,因为它们在Ruby中更常见。但是如果你愿意,你可以传递一个方法。调用method来获取方法,调用.call来调用它:

def weightedknn( data, vec1, k = 5, weightf = method(:gaussian) )
  ...
  weight = weightf.call( dist )
  ...
end
票数 110
EN

Stack Overflow用户

发布于 2009-02-07 00:41:05

正常的Ruby方法是使用块。

所以它应该是这样的:

def weightedknn( data, vec1, k = 5 )
  foo
  weight = yield( dist )
  foo
end

它的用法如下:

weightenknn( data, vec1 ) { |dist| gaussian( dist ) }

此模式在Ruby中广泛使用。

票数 26
EN

Stack Overflow用户

发布于 2009-02-07 00:06:59

你必须调用函数对象的方法" call“:

weight = weightf.call( dist )

编辑:正如评论中所解释的,这种方法是错误的。如果你使用的是Procs而不是普通函数,这将会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/522720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档