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

Python018

为什么在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,这是我的见解

class <<Persome code end 这个不是创建类,是打开eigenclass。eigenclass网上解释一大堆,简单地说一般一个实例要响应一个实例方法要看这个实例所属的类中有没有定义这个方法,eigenclass存在于这一步中间,比如实例要响应方法a,会先看这个实例的eigenclass有没有方法a,再看所属的类有没有方法a,参考以下代码

class Per

def say word

puts word

end

end

per = Per.new

class <<per

def say word

puts word.reverse

end

end

per.say 'stressed' # desserts

Per.new.say 'stressed' # stressed

可以看到per虽然是Per的实例,但是执行say方法时是执行他的eigenclass里面的say方法,而不影响Per的其他实例的say方法,这就是eigenclass,具体会应用在元编程里取得metaclass,这里就不多说了。至于你问的输出,你可以试一下,classend 这个跟定义方法defend一样,会有返回值,返回值就是最后一个表达式,你可以试一下puts class Test'hello world'end,所以你的返回值就是不同作用域的self。