2012-11-06 22 views
11

सबसे पहले मैं इन तरीकों के बारे में दस्तावेजों में दो उपयोगी लेख नहीं मिले:रूबी का "कोई?" और सभी?" खाली सरणी पर तरीकों व्यवहार और हैश

सभी ?: के प्रत्येक तत्व पासेस दिए गए ब्लॉक में संग्रह। यदि ब्लॉक कभी झूठी या शून्य नहीं लौटाता है तो विधि सही होती है।

कोई भी ?: दिए गए ब्लॉक में संग्रह के प्रत्येक तत्व को पास करता है। यदि ब्लॉक कभी झूठी या शून्य के अलावा कोई मान देता है तो विधि सही होती है।

लेकिन खाली सरणियों और हैश के मामले में मुझे मिल गया:

irb(main):004:0> [nil, "car", "bus"].all? 
=> false 
irb(main):005:0> ["nil", "car", "bus"].all? 
=> true 
irb(main):006:0> [].all? 
=> true 
irb(main):007:0> ["nil", "car", "bus"].any? 
=> true 
irb(main):008:0> [nil, "car", "bus"].any? 
=> true 
irb(main):009:0> [nil].any? 
=> false 
irb(main):010:0> [].any? 
=> false 

किसी क्यों खाली सरणियों any? विधि और all? के मामले में true के मामले में मुझे false दे मुझे समझा सकते हैं?

+4

गणितीय शर्तों में: 'कोई भी?' तार्किक का एक गुना है या जिसका पहचान तत्व 'झूठा' है। दूसरी तरफ 'सब?' तार्किक का एक गुना है और जिसका पहचान तत्व 'सत्य' है। http://en.wikipedia.org/wiki/Identity_element – tokland

उत्तर

16

यदि ब्लॉक कभी झूठी या शून्य नहीं लौटाता है तो विधि सही होती है।

इसलिए चूंकि ब्लॉक कभी नहीं बुलाया जाता है, निश्चित रूप से यह कभी झूठी या शून्य नहीं देता है, इस प्रकार all सत्य देता है।

ही any के लिए चला जाता है:

विधि TRUE देता ब्लॉक कभी झूठी या नहीं के बराबर के अलावा किसी अन्य मान देता है।

के बाद से ब्लॉक कहा जाता हो जाता है कभी नहीं, यह गलत या नहीं के बराबर है, इस प्रकार any रिटर्न झूठी अलावा किसी अन्य मान देता है कभी नहीं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^