【发布时间】:2011-02-04 11:54:07
【问题描述】:
以下行在 ruby 1.8.7 中运行良好,但在 1.8.6 中运行良好。我可以在 1.8.6 中使用什么替代方法
x = [3,4,5,6,7,78,4,3,2,5,5,3]
x.count(3)
=> 3
由于 count 在 1.8.6 版本中不是 Array 中的方法,因此我收到此错误。这个版本有没有类似的方法?
【问题讨论】:
以下行在 ruby 1.8.7 中运行良好,但在 1.8.6 中运行良好。我可以在 1.8.6 中使用什么替代方法
x = [3,4,5,6,7,78,4,3,2,5,5,3]
x.count(3)
=> 3
由于 count 在 1.8.6 版本中不是 Array 中的方法,因此我收到此错误。这个版本有没有类似的方法?
【问题讨论】:
x = [3,4,5,6,7,78,4,3,2,5,5,3]
x.grep(3).size
#=> 3
【讨论】:
count = x.select {|e| e == 3}.size
【讨论】:
find_all 是 select 的别名 - 或者 select 是 find_all 的别名。无论如何,两者在这里都很好用。
作为一般提示:有一个非常酷的backports library by Marc-André Lafortune,它尝试实现 Ruby 1.8.7、1.8.8 的尽可能多的新功能(即 Subversion 存储库中 1_8 分支的尖端) , 1.9.1 和 1.9.2 标准库以及一些从 ActiveSupport 中选择的方法,尽可能在纯的、跨 1.8-1.9 兼容的 Ruby 中。
所以,如果你只是这样做
require 'backports'
它会将您的 Ruby 1.8.6、1.8.7 或 1.9.1 转换为尽可能接近 Ruby 1.9.2,而不会降级为 C 或破坏向后兼容性。
免责声明:我自己并没有真正使用过它,因为无论如何我都没有看到使用过时版本的 Ruby 的意义。
【讨论】:
require 'backports/1.8.7/enumerable/count')