将类方法作为块传递给ruby

斯莱特

我遇到了一个可能很愚蠢的问题,但是我一生都无法找到任何有关此事能否完成的信息。

基本上,我知道调用array.each do(&method)将方法转换为proc并使用每个产生的值对其进行调用。我遇到的问题是尝试使用类方法执行相同操作。

我已经写了一个Card类,想用这样的东西解析一个字符串。

%w{4S 5D 9H 1C 3S}.map(&Card.safe_parse)

我试过了

.map(Card.method(:safe_parse).to_proc) 

.map(&Card.method(:safe_parse)) 

但没有任何效果。显然,它可以使用,.map { |x| Card.safe_parse x }但是感觉好像有一种我看不到的聪明方法,并且我试图更好地理解红宝石块。

谢谢!

塔德曼

长途是最常规的方法,而短途是您的最后一个示例:

%w{4S 5D 9H 1C 3S}.map(&Card.method(:safe_parse))

仅当safe_parse是模块方法而不是mixin方法,或者换句话说,您已在模块末尾将其定义为self.safe_parse或完成extend self时,此方法才有效。

据我所知,不可能instance_method直接在mixin方法上使用,因为这些方法缺少实例上下文。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章