2010-10-05 52 views
11

我想单线程返回true/false,它测试数组中的每个元素是否为整数。所以如果数组中的任何元素不是整数,它应该返回false,否则返回true。这里是我的尝试:Ruby - 测试每个数组元素,得到一个结果

>> ([2,1,4].map {|x| (x.is_a? Integer)}).reduce {|x, result| x and result} 
=> true 
>> ([2,"a",4].map {|x| (x.is_a? Integer)}).reduce {|x, result| x and result} 
=> false 

任何其他想法进一步提炼它?

回答

19
array.all?{ |x| x.is_a? Integer } 
+0

完美,谢谢了。 – oaklodge 2010-10-05 17:45:48

+0

感觉像魔术! – mko 2014-06-12 02:33:42

5
ary.all?(&Integer.method(:===)) 
+0

我真的希望Ruby有更好的访问方法的语法。这在概念上更纯粹,但实际上实际上比写出明确的块要长。 – Chuck 2010-10-05 17:38:21

+3

@Chuck:是的。每隔几年就会出现一个想法,以便更好地区分'.'(消息发送)和'::'(范围解析)操作符。目前,'.'表示消息发送,'::'表示范围解析或消息发送。如果我们从'::'中删除“或消息发送”部分,我们可以扩展它以允许像'foo :: bar'这样的东西表示'foo.method(:bar)'。目前,这不起作用,因为'foo :: bar'的含义与'foo.bar'相同。 – 2010-10-05 17:43:40

+0

我喜欢这个点自由风格.. :) – 2013-08-15 19:17:11

相关问题