首页 > 解决方案 > 在比较中使用 & 和枚举数

问题描述

我有以下引发错误的代码段:

w = %w[ant dog]
w.all?(&:length > 4)

它抛出一个错误comparison of Symbol with 4 failed (ArgumentError)

我不确定为什么&:length是符号而不是数字。我试过了:

w.all?((&:length) > 4)

但这给了我一个语法错误。有没有办法让它工作或者我必须这样做:w.all? { |word| word.length > 4 }

标签: ruby

解决方案


您收到以下错误,因为解释器实际上执行了以下代码:

&:length > 4

并且不能将 symbol:length与 number进行比较4

有没有办法让它工作或者我必须这样做:w.all?{ |字| word.length > 4 }

您可以执行以下操作:

w.map(&:length).all? { |n| n > 4 }

但是下面的代码是最简单的方法:

w.all? { |word| word.length > 4 }

推荐阅读