ruby - 全部?与符号 (&) 和块的方法行为
问题描述
我有一种方法可以检查坐标是否有效。
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?)
。
解决方案
这种“与”符号是以下形式的简写:
coordinates.all? { |c| c.valid_coordinate? }
它显然与您想要的不同,因为它是在variable 而不是valid_coordinate?
持有的对象上调用的:c
self
coordinated.all? { |c| valid_coordinate?(c) }
这就是为什么它不起作用。
推荐阅读
- python - 并行获取每个浏览器的 selenium 驱动程序
- laravel - 如何将 Laravel 过滤后的集合作为数组传递给 Vue?
- c++ - 使用带有clang而不是gcc的boost::filesystem链接的程序
- sql - 对话中的最新消息 - 组合了多个 SQL 语句
- scheme - 球拍:为什么不适用于“位图”功能?
- node.js - nginx 服务器将自定义端口上的请求转发到节点应用程序
- angular - jwt token 过期时间(asp.net core)
- node.js - Semver 库给了我一个无效的 0.0.001 版本
- django - 在 ListView 中拖放元素 - Django
- html - Mac 与 Windows 上的 Chrome 的 rem 计算在字体大小和行高之间的差异?