2012-03-28 10 views

उत्तर

35

एक ब्लॉक नहीं एक लैम्ब्डा है। यह देखने के लिए कि ब्लॉक का उपयोग block_given? है या नहीं।

किसी भी मामले में, मैं "कॉल करने का जवाब" का उपयोग करूंगा यदि केवल मुझे वास्तव में इस निर्माण की आवश्यकता है, जिसे मैं टालने का प्रयास करूंगा। (अनुबंध परिभाषित करें और फोन करने वाले इसे सही ढंग से लागू करने के लिए जिम्मेदार बनाना!)

(lambda {1}).respond_to? :call # => true 
(1).respond_to? :call   # => false 

मैं संरचनात्मक (उर्फ बतख) के इस रूप का मानना ​​है कि टाइपिंगकर्ताकारक टाइपिंग की तुलना में रूबी के साथ और अधिक इनलाइन है के साथ "है एक "रिश्ते।

देखने के लिए क्या (सैंडबॉक्स में भविष्य खेलने के लिए) रिश्तों पैदा हो सकती हैं "एक है":

RUBY_VERSION   # => 1.9.2 
(lambda {}).class  # => Proc 
(Proc.new {}).class # => Proc 
def x (&p); p; end  # note this "lifts" the block to a Proc 
(x {}).class   # => Proc 

मुबारक कोडिंग।

+0

बहुत अच्छा है कि 'answer_to?' विधि है। इस तरह के चीजों को बहुत आसान बनाता है। – Automatico

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