क्या Proc.new
या Kernel.proc
का उपयोग कर तत्काल प्रो की सख्त धैर्य प्रवर्तन "चालू" करने का कोई तरीका है, ताकि यह lambda
के साथ तत्काल प्रो की तरह व्यवहार करे?क्या मैं किसी विधि को पारित ब्लॉक पर धर्मार्थ लागू कर सकता हूं?
मेरा initialize
विधि ब्लॉक &action
लेता है और इसे एक आवृत्ति चर में निर्दिष्ट करता है। मैं धैर्यपूर्वक कड़ाई से लागू करने के लिए action
चाहता हूं, इसलिए जब मैं बाद में तर्क लागू करता हूं, तो यह ArgumentError
उठाता है कि मैं एक और अधिक सार्थक अपवाद को बचा सकता हूं और बढ़ा सकता हूं। मूल रूप से:
class Command
attr_reader :name, :action
def initialize(name, &action)
@name = name
@action = action
end
def perform(*args)
begin
action.call(*args)
rescue ArgumentError
raise(WrongArity.new(args.size))
end
end
end
class WrongArity < StandardError; end
दुर्भाग्य से, action
arity डिफ़ॉल्ट रूप से लागू नहीं करता है:
c = Command.new('second_argument') { |_, y| y }
c.perform(1) # => nil
action.to_proc
काम नहीं करता है, और न ही lambda(&action)
करता है।
कोई अन्य विचार? या समस्या के लिए बेहतर दृष्टिकोण?
धन्यवाद!
आप सब पर 'और action' उपयोग करने की आवश्यकता नहीं है:
तो तुम कुछ इस तरह कर सकता है। बस एक्शन पैरामीटर और उस लाइन पर जहां आप इंस्टेंस वैरिएबल सेट करते हैं, 'lambda' के साथ' action' को प्रतिस्थापित करें। मैंने नीचे एक कोड नमूना पोस्ट किया। – wrhall