我想创建一个过滤器,并能够将其应用于数组或散列.例如:

def isodd(i)
  i % 2 == 1
end

我希望能够像这样使用它:

x = [1,2,3,4]
puts x.select(isodd)
x.delete_if(isodd)
puts x

这似乎应该是直截了当的,但我不知道我需要做什么才能让它工作.

推荐答案

创建lambda,然后使用&运算符转换为块:

isodd = lambda { |i| i % 2 == 1 }
[1,2,3,4].select(&isodd)

Ruby相关问答推荐

ruby:比较两个单词并从中提取不常见的字母

判断一个数组是否是Ruby中另一个数组的子集

有人可以解释 Ruby 在块中使用管道字符吗?

Sinatra 与 EventMachine WebSockets 一起工作是否成功?

Ruby:子字符串到一定长度,也到子字符串中的最后一个空格

Integer(value) 和 value.to_i 之间的区别

如何在 Ruby 中初始化 Hash 中的数组

如果浮点组件不是 .00 sprintf/printf,则仅显示小数点

复制文件,在 Ruby 中根据需要创建目录

Ruby - 将块传递给方法

如何获取字符串中所有出现的 Ruby 正则表达式的匹配数据?

用mustache迭代数组

在包含任意数量的嵌套散列和数组的散列中查找键/值对

判断 Ruby HTTP 响应是否成功

Ruby 多维数组

如何从 SystemStackError 中获取回溯:堆栈级别太深?

如何在 ruby​​ 中进行命名捕获

在 Ruby 中计算中位数

如何在 Capistrano v3 的服务器上运行 shell 命令?

Ruby:从 Ruby 中的变量创建哈希键和值