2013-06-14 9 views
6

बस सोच रहा है, क्या रुबी में मैक्रोज़ का उपयोग करने का कोई तरीका है जो एक पाठ पाठ प्रतिस्थापन करता है जिस तरह से सी काम करेगा?मैक्रोज़?

उदाहरण के लिए:

define ARGS 1,2 
sum(ARGS) # returns 3 

संपादित करें: अधिक विशेष रूप से मेरी समस्या लग रहा है और अधिक की तरह:

@button1 = FXButton.new(self, "Button 1", ALLBUTTONPROPERTIES) 
@button2 = FXButton.new(self, "Button 2", ALLBUTTONPROPERTIES) 
@button3 = FXButton.new(self, "Button 3", ALLBUTTONPROPERTIES) 
:

@button1 = FXButton.new(self, "Button 1",:opts => BUTTONPROPERTIES,:width => width, :height => height) 
@button2 = FXButton.new(self, "Button 2",:opts => BUTTONPROPERTIES,:width => width, :height => height) 
@button3 = FXButton.new(self, "Button 3",:opts => BUTTONPROPERTIES,:width => width, :height => height) 

और आदर्श मैं कोड की तरह लग रहे करना चाहते हैं

ध्यान दें कि मेरे पास "चौड़ाई" और "ऊंचाई" चर है जो कि शुरुआत में ठीक से नहीं पारित किया जाएगा एफएक्सबटन वर्ग का एकीकरण अगर मैं उन्हें बस कुछ पूर्व निर्धारित मूल्य पर सेट करता हूं। क्या कोई कोड प्रतिस्थापन है जो इस मुद्दे का ख्याल रखेगा?

+4

क्या आप * समस्या * का वर्णन कर सकते हैं * आप w/रूबी को हल करने का प्रयास कर रहे हैं? तो शायद हम सवाल का बेहतर जवाब दे सकते हैं। – Pete

+0

वास्तविक "समस्या" यह है कि मैं बार-बार एक समारोह में 3 तर्कों के लिए समान मान टाइप करता हूं और केवल एक बदलता हूं। समस्या यह है कि मैं लिख रहे कुछ तर्कों में से कुछ चर हैं। – thecooltodd

उत्तर

9

आपको मैक्रो की आवश्यकता नहीं है। बस एक चर या स्थिर परिभाषित करें।

A = [1, 2] 
A.inject(:+) # => 3 

अपने प्रश्न का संपादित

आप इस तरह से कर सकते हैं के बाद:

ALLBUTTONPROPERTIES = ->{{opts: => BUTTONPROPERTIES, width: width, height: height}} 

और एक संदर्भ में, जहां स्थिरांक और चर BUTTONPROPERTIES, width, height हैं भीतर कुछ मूल्य असाइन किया, ऐसा करें:

@button1 = FXButton.new(self, "Button 1", ALLBUTTONPROPERTIES.call) 
@button2 = FXButton.new(self, "Button 2", ALLBUTTONPROPERTIES.call) 
@button3 = FXButton.new(self, "Button 3", ALLBUTTONPROPERTIES.call) 
+0

कॉल क्या करता है? मुझे इसे कहीं भी नहीं मिल रहा है। क्या यह चौड़ाई और ऊंचाई के मूल्यों को फिर से सौंपता है? - ऑपरेटर क्या करता है? एक बार फिर धन्यवाद। – thecooltodd

+0

'-> {...} 'को लैम्ब्डा कहा जाता है। यह एक 'प्रक्रिया' वस्तु बनाता है। इसकी रचना में इसका मूल्यांकन नहीं किया जाता है। 'कॉल' दिए गए संदर्भ में इसका मूल्यांकन करता है। – sawa

+0

बिल्कुल सही! मुझे नहीं पता था कि लैम्ब्डा बनाने के लिए वाक्यविन्यास था। धन्यवाद। सबसे बढ़िया उत्तर। – thecooltodd

7

रूबी में कोई प्रीप्रोसेस नहीं है, मैक्रोज़ समझ में नहीं आता है। बस स्ट्रिंग स्थिर या जो भी अन्य प्रकार की निरंतर आवश्यकता है उसका उपयोग करें।

7

आप जो भी करने की कोशिश कर रहे हैं उसके आस-पास शायद एक और तरीका है। प्रीप्रोसेसर मैक्रोज़ समझ में नहीं आता है क्योंकि रूबी एक संकलित भाषा नहीं है, यह एक व्याख्या की गई भाषा है।

@buttons = ["Button 1", "Button 2", "Button 3"].map do |name| 
    FXButton.new(self, name, 
       :opts => BUTTONPROPERTIES, 
       :width => width, 
       :height => height) 
end 

इस उदाहरण में:

args = [1, 2] 
sum(*args) # equivalent to sum(1, 2) 
+2

अब तक यह मुझे प्राप्त सबसे अच्छा जवाब है।लगभग वही है जो मैं ढूंढ रहा हूं। एक सरल और सहायक उत्तर प्रदान करने के लिए – thecooltodd

+2

+1। –

+0

@downvoter, समझाने के लिए दिमाग? – Shoe

3

रूबी अपनी समस्या का समाधान शायद अपने दृष्टिकोण से थोड़ा अलग होगा के रास्ते:

विशेष रूप से अपने उदाहरण के लिए वहाँ है कि करने के लिए एक बहुत साफ रास्ता है आपके पास @button1, @button2, @button3 चर नहीं हैं। इसके बजाय @buttons सरणी है जिसमें तीनों हैं।

+0

पर टाइप टाइपस्क्रिप्ट (जेनरेटर के अंदर प्रतीक्षा कीवर्ड जोड़ना) और रूबी (थ्रेड-सुरक्षित ऑटोलोडिंग) को पूर्ववत करते हैं, मुझे एहसास है कि मैंने अपनी समस्या पूरी तरह से समझा नहीं है। यहां तक ​​कि यदि मैं बटन 1-3 के लिए करता हूं, तो मुझे एक पूरी तरह से अलग वर्ग में एक और 3 बटन बनाना पड़ सकता है (केवल तात्कालिकता नहीं) इसलिए मुझे अभी भी उस कोड को फिर से लिखना होगा। – thecooltodd

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