首页 > 解决方案 > 全部?与符号 (&) 和块的方法行为

问题描述

我有一种方法可以检查坐标是否有效。

def valid_coordinate?(coordinate)
  valid_latitude?(coordinate['lat']) && valid_longitude?(coordinate['lng'])
end

当我尝试将它与all?哈希数组一起使用时(例如哈希是{"lat" => 63, "lng" => -24}),它适用于块,但不适用于&符号。

工作版本:

coordinates.all? { |c| valid_coordinate?(c) }

非工作版本:

coordinates.all?(&:valid_coordinate?)

我收到以下错误:

NoMethodError: undefined method `valid_coordinate?' for {"lat"=>63, "lng"=>-24}:Hash

我还检查了我的 Ruby 版本的文档页面,但找不到解释。据我所知,这种方法 ( ) 可以使用 & 符号[1,3,5].all?(&:odd?)

标签: ruby

解决方案


这种“与”符号是以下形式的简写:

coordinates.all? { |c| c.valid_coordinate? }

它显然与您想要的不同,因为它是在variable 而不是valid_coordinate?持有的对象上调用的:cself

coordinated.all? { |c| valid_coordinate?(c) }

这就是为什么它不起作用。


推荐阅读