2009-08-05 9 views
42

लैम्ब्डा या प्रो का उपयोग कब किया जाना चाहिए? मैंने उन्हें अज्ञात कार्यों के रूप में वर्णित देखा है, लेकिन मैं इस अवधारणा को समझने के लिए संघर्ष कर रहा हूं। जब आप रूबी में एक का उपयोग कर सकते हैं, तो विशेष रूप से रूबी पर रूबी में किसी भी लिंक या उदाहरणों की सराहना करेंगे।रेल पर रूबी में लैम्ब्डा का उपयोग कब करें?

उत्तर

39

http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/ में कौन से ब्लॉक/procs/lambdas हैं, आप उनका उपयोग कैसे कर सकते हैं, और वे अन्य भाषाओं में फ़ंक्शंस की तुलना कैसे करते हैं, इसका एक रन-डाउन है। यह निश्चित रूप से आपके प्रश्न का उत्तर देता है।

क्या पता है कि अंतिम खंड 'lambdas पर एक नोट' एक मुद्दा यह है कि रूबी 1.8 में ही सच्चा और 1.9 में बदल है का उल्लेख किया - Ruby: Proc.new { 'waffles' } vs. proc { 'waffles' }

+1

फिर से तय करने के लिए इस महान लेख पढ़ें। धन्यवाद;) –

+0

लिंक फिर से मर चुका है – JeffC

+1

ब्लेह, फिर से खेद है। ठीक कर देंगे। –

3

लैम्बडा named_scope में असाधारण रूप से उपयोगी है, ताकि आप named_scopes पर पैरामीटर पास कर सकें।

9

मैं नहीं दिख रहा है जहां पर रूबी के बीच भेद करना रेल और रूबी। यदि आप रेल एप्लिकेशन पर रूबी लिख रहे हैं, तो आप रूबी कोड लिख रहे हैं, इसलिए यदि यह रूबी में उपयोगी है, तो यह रूबी पर रूबी में उपयोगी होना चाहिए।

वैसे भी, इस लेख, Some Useful Closures in Ruby, सहायक होना चाहिए, साथ ही इस रूप में: http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/

+0

अच्छा बिंदु। कुछ प्रकार की चीट शीट जो लैम्ब्डा ले जाने वाली सभी अंतर्निहित विधियों को सूचीबद्ध करती है, वे समझ में आ सकती हैं, लेकिन यदि आप समझते हैं कि लैम्ब्डा क्या है, तो आपको ऐसी चीट शीट की आवश्यकता नहीं है। –

6

यह कोड का एक टुकड़ा आप के आसपास पारित करने के लिए अनुमति देता है।

named_scope :scoped_by_user, lambda {|user| {:conditions=>{:user_id=>user.id}}} 

आप एक परियोजना मॉडल हैं और आप एक विशेष उपयोगकर्ता के लिए सभी परियोजनाओं प्राप्त करना चाहते हैं, तो आप कुछ कर सकते हैं:

यह named_scope में विशेष रूप से उपयोगी है, यह आप इस तरह कुछ करने के लिए अनुमति देता है इस तरह:

Project.scoped_by_user(123) 
5

कहाँ मैं लैम्ब्डा देखा है इस्तेमाल किया परीक्षण में है ...

lambda do 
    post :create, :user => @attr 
end.should_not change(User, :count) 

लैम्ब्डा आपको यह सुनिश्चित करने के लिए अंत में यह परीक्षण करने की अनुमति देता है कि लैम्ब्डा ब्लॉक में निष्पादित कोड उपयोगकर्ता गिनती को बदलता नहीं है।

5

लैम्ब्डा क्या है?

अपने आईआरबी साथ आज़माएं।

lam = lambda { puts "Hello world"} 
lam.class 

#output is 
=> Proc 

रूबी में लैम्ब्डा प्रो क्लास का एक उदाहरण भी है। भेड़ का बच्चा procs का एक अलग स्वाद है।

प्रो क्या है?

प्रो ऑब्जेक्ट्स कोड के ब्लॉक हैं जो स्थानीय चर के सेट से बंधे हैं।

proc = Proc.new { puts "Hello World" } 
proc.call 

#output is 
=> Hello World 

एक proc और लैम्ब्डा के बीच क्या अंतर है?तुलना उपयोगिताओं को समझाएगी

लैम्बडास तर्कों की संख्या की जांच करें, जबकि प्रोसेस नहीं करते हैं।

multiply = lambda { |x,y| x*y } 
multiply.call(2,3) #=>6 
multiply.call(2) #ArgumentError: wrong number of arguments (1 for 2) 

multiply = Proc.new {|x| x*x} 
multiply.call(2) # =>4 
multiply.call(2,3) # =>4 (It ignore the second argument) 

lambdas और procs 'वापसी' कीवर्ड अलग ढंग से (उदाहरण के लिए नीचे दिए गए लेख पढ़ें)

इलाज में अधिक जानकारी के http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/

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