मैं ने पाया है कि सभी उदाहरणों में है कि मैं के लिए देखा है (रेल दस्तावेज शामिल): यदि सत्यापन तरीकों का विकल्प लैम्ब्डा के बजाय Proc.new का उपयोग करता है, उदाहरण के लिएरेल सत्यापन: if => Proc.new या lambda?
class Foo < ActiveRecord::Base
validates_presence_of :name, :if => Proc.new{|f| .... } # why not lambda here?
end
इसके लिए किसी भी कारण है? जहाँ तक मुझे पता है, लैम्ब्डा
- तर्कों के साथ अधिक सख्त है।
- कॉलिंग समारोह से नहीं, ब्लॉक से लैम्ब्डा ब्लॉक रिटर्न में भी बयान वापस करें।
दोनों के लिए वांछनीय व्यवहार प्रतीत होता है: यदि ऊपर उल्लिखित विकल्प है, तो क्या मुझे कुछ याद आ रही है?
धन्यवाद जिट्स, मुझे लगता है कि यह बहुत दुर्लभ है कि मैं इसका उपयोग करता हूं: यदि मॉडल उदाहरण के बिना विकल्प, तो उस मामले में मैं अभी भी डाल सकता हूं | डमी | क्या आप वहां मौजूद हैं। तो मैं लैम्ब्डा के साथ जाऊंगा, लेकिन आप स्पष्टीकरण समझ में आता है। –
लेकिन क्या हमें वास्तव में एक तर्क के रूप में उदाहरण को पारित करने की आवश्यकता है? अगर मैं सही ढंग से समझता हूं, ब्लॉक में कोड (या तो Proc.new या lambda में) केवल तभी तैयार किया जाएगा जब आवश्यक हो और कुछ ऐसा लिखना संभव हो: है_मनी: related_objects पहले_सेव: do_something, if: -> { associated_objects.empty? } ध्यान दें कि मैंने तर्क छोड़ दिया {| instance | example.associated _...} – januszm