为什么在ruby中,[].all?{|i| i==1} 的结果为true?

Python09

为什么在ruby中,[].all?{|i| i==1} 的结果为true?,第1张

.all?这是一个ruby方法,他的返回结果只有两个,true或者false,判断的是数组中每一个元素都是true的就返回true,只要有一个不是true就返回false,如[nil,22].all?返回的就是false。还有就是判断数组遍历运算过程中,每一个结果是不是true,如[1,2,3].all?{|w| w >1}这个的结果就是false。

你的例子中,作为判断对象的是一个空数组,不执行后面的代码,也没有一个元素是false的,所以返回的是true,这是我的见解

下面是对 Rails Interview Questions 中的

Ruby 部分的解答:

从上面可以看出,其实Proc和lambda都是 Proc 对象。

首先我们来回答第一问:怎么通过某个字段来对对象数组排序?

假设我们有一个对象数组 @users ,我们需要让他对字段 name 排序,则我们可以:

如果是在 ActiveRecord 中,则我们只需:

下面列举我喜欢的几个常用的gems及它的可替代备选方案

首先我们说明一下递归(recursive)和迭代(iterative):

递归 :一个树结构,每个分支都探究到最远,发现无法继续走的时候往回走,每个节点只会访问一次。

迭代 :一个环结构,每次迭代都是一个圈,不会落掉其中的每一步,然后不断循环每个节点都会被循环访问。

由此我们可以看出 ruby 中更加常用的选择是 迭代 ,就像 .each , .times , .map 等都是迭代循环的形式。

ruby之父,松本行弘,日本人

于 2015-03-20

终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。

http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas

以上是 ruby 文档,他给出了正确的用法:

a = Array.new(2) { Hash.new }