2010-10-05 8 views
11

मैं एक-लाइनर को सच/गलत वापस करना चाहता हूं, जो प्रत्येक तत्व को सरणी में जांचता है कि यह एक इंटीजर है या नहीं। तो अगर सरणी में कोई तत्व इंटीजर नहीं है, तो उसे झूठ वापस करना चाहिए, और सच है। यहां मेरी कोशिश है:रूबी - प्रत्येक सरणी तत्व का परीक्षण करें, एक परिणाम प्राप्त करें

>> ([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

+0

जादू की तरह लग रहा है! – mko

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

मैं वास्तव में चाहता हूं कि रूबी के तरीकों तक पहुंचने के लिए बेहतर वाक्यविन्यास था। यह अधिक अवधारणात्मक शुद्ध है, लेकिन व्यावहारिक रूप से स्पष्ट ब्लॉक को लिखने से वास्तव में लंबा है। – Chuck

+3

@Chuck: हाँ। '.' (संदेश भेजने) और' :: '(स्कोप रिज़ॉल्यूशन) ऑपरेटरों के बीच बेहतर अंतर बनाने के लिए हर कुछ वर्षों में पॉप-अप करने वाला एक विचार है। वर्तमान में, '.' का अर्थ है संदेश भेजना और '::' का अर्थ स्कोप पुनर्वसन या संदेश भेजना है। अगर हम ':: 'से" संदेश भेजना "भाग हटाते हैं, तो हम इसे' foo :: bar' जैसे सामान 'foo.method (: bar)' के लिए अनुमति देने के लिए बढ़ा सकते हैं। वर्तमान में, यह काम नहीं करता है, क्योंकि 'foo :: bar' का मतलब 'foo.bar' जैसा ही है। –

+0

मुझे इस बिंदु को मुफ्त शैली पसंद है .. :) –

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