रूबी में आप -> ऑपरेटर को क्या कहते हैं?


205
  1. आप ->निम्नलिखित के रूप में ऑपरेटर को क्या कहते हैं ?

    ->(...) do
      ...
    end
  2. निम्नलिखित स्निपेट समतुल्य नहीं हैं?

    succ = ->(x) {x + 1}
    succ = lambda {|x| x + 1}

70
यह कष्टप्रद है कि आप Google "->" - अच्छा सवाल नहीं पूछ सकते हैं!
केविन

10
@Kevin आप, तथापि, स्टैक ओवरफ़्लो के लिए खोज करने के बिल्ट-इन लचीला खोज का उपयोग कर सकते हैं "->": title:"->" [ruby] is:question। कुंजी उद्धरण चिह्नों का उपयोग करना है।

8
सिंबलहाउंड यह भी कर सकता है: symbolhound.com/?q=-%3E+ruby
एंड्रयू ग्रिम

7
कष्टप्रद या कष्टप्रद नहीं है, लेकिन "रूबी ->" अनुरोध के लिए googling इस सवाल का लिंक पहले शीर्ष परिणाम के रूप में दे।
फ़्लो-वेब

6
@ केविन शायद पिछले 2 वर्षों में चीजें बदल गई हैं, लेकिन ruby "->"
गुगली करना

जवाबों:


238

में रूबी प्रोग्रामिंग भाषा ( "के तरीके, Procs, lambdas, और संवृति"), एक लैम्ब्डा का उपयोग करके परिभाषित ->कहा जाता है लैम्ब्डा शाब्दिक

succ = ->(x){ x+1 }
succ.call(2)

कोड निम्नलिखित के बराबर है।

succ = lambda { |x| x + 1 }
succ.call(2)

अनौपचारिक रूप से, मैंने इसे स्टैबी लैम्ब्डा या स्टैबी लिबरल कहा जा रहा है ।


127

=>== हैश रॉकेट

हैश मैप शाब्दिक में मानों से कुंजियों को अलग करता है।


->== डैश रॉकेट

रूबी 1.9.X (args के बिना) और Ruby 2.X (args के साथ) में एक लैम्ब्डा शाब्दिक को परिभाषित करने के लिए उपयोग किया जाता है। आपके द्वारा दिए गए ( ->(x) { x * 2 }और lambda { |x| x * 2 }) उदाहरण वास्तव में बराबर हैं।


10
FYI करें 2 शैलियों पूरी तरह से विनिमेय अगर आप का उपयोग नहीं कर रहे हैं do/ endक्योंकि पूर्वता नियमों का। यह एक निरीक्षण किए गए लंबोदर प्रिंट करता है puts -> do 1 end:। यह ब्लॉक को पास करता है puts, इसे मेमने से चुराता है और एक तर्क पैदा करता है:puts lambda do 1 end
केल्विन

1
इसके अलावा, रूबी 1.9.3 के लंबोदर शाब्दिक तर्क देते हैं।
केल्विन

3
@Kelvin कि होगा क्योंकि रूबी की व्याख्या करने की कोशिश करता है puts lambda do 1 endके रूप में puts(lambda) do 1 endके बजाय puts(lambda do 1 end)। उत्तरार्द्ध वास्तव में काम करता है - रूबी बस ब्लॉक को putsविधि के बजाय पास करने की कोशिश करता है lambdaअगर कोई कोष्ठक नहीं है।
PJSCopeland

1
@PJSCopeland मैं यह नहीं कह रहा हूं कि आप उन्हें समान कार्य करने के लिए नहीं मिल सकते। मैं कह रहा हूं कि वे 100% विनिमेय सिंटेक्स-वार नहीं हैं, यानी आप बस सभी मामलों में ड्रॉप-इन प्रतिस्थापन नहीं कर सकते (क्योंकि कभी-कभी आपको अतिरिक्त कोष्ठक की आवश्यकता होती है lambda)।
केल्विन

@rdurand क्या आपने सारांश "स्टब्बी लैम्ब्डा को रूबी 1.9 में तर्क स्वीकार नहीं कर सकते" के साथ संपादित किया? यह सही नहीं है, कम से कम 1.9.3 के लिए - आर्ग की अनुमति है।
केल्विन


3

->(x) { ... }के रूप में ही है lambda { |x| ... }। यह एक मेमना बनाता है। कर्नेल देखें # लैम्ब्डा एक लैम्ब्डा एक प्रकार की खरीद है, जो यह सुनिश्चित करता है कि इसमें दिए गए मापदंडों की संख्या सही है। प्रोक :: नई और कर्नेल # प्रोक भी देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.