Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

11 रूबी ट्रिक्स जो आपने पहले नहीं देखी होंगी

कुछ अच्छे रूबी ट्रिक्स खोज रहे हैं?

आपने उन्हें ढूंढ लिया!

इस लेख में मैं आपके साथ अपने कुछ पसंदीदा साझा करना चाहता हूं।

सामग्री

  • 1 डीप कॉपी
  • लैम्ब्डा को कॉल करने के 2 अलग-अलग तरीके
  • 3 पहले से भरी हुई सरणी बनाना
  • 4 सत्य, असत्य और शून्य वस्तुएं हैं
  • 5 लैम्ब्डा तर्क-वितर्क को लेकर सख्त हैं, लेकिन प्रक्रिया को कोई परवाह नहीं है
  • 6 सीधे irb या फ़ाइलों के बिना कोड निष्पादित करें
  • 7 एक कमांड में आपका अपना मिनी-आईआरबी
  • 8 किसी वस्तु को मुक्त करना (खतरे!)
  • 9 विशेष पहचान वाली वस्तुएं
  • 10 irb या pry में बड़े आउटपुट से बचें
  • 11 वर्तमान कॉल स्टैक प्राप्त करने के लिए कॉलर विधि का उपयोग करना
  • 12 बोनस! किसी भी मान को बूलियन में बदलें
  • 13 बोनस! कीवर्ड को वैरिएबल नाम के रूप में इस्तेमाल करें
  • 14 सारांश
    • 14.1 संबंधित

डीप कॉपी

जब आप copy एक ऑब्जेक्ट जिसमें अन्य ऑब्जेक्ट होते हैं, जैसे Array , इन वस्तुओं का केवल एक संदर्भ कॉपी किया जाता है।

आप इसे यहां क्रिया में देख सकते हैं:

food = %w( bread milk orange )
food.map(&:object_id)       # [35401044, 35401020, 35400996]
food.clone.map(&:object_id) # [35401044, 35401020, 35400996]

Marshal का उपयोग करना वर्ग, जो सामान्य रूप से क्रमांकन के लिए उपयोग किया जाता है, आप किसी वस्तु की 'डीप कॉपी' बना सकते हैं।

def deep_copy(obj)
  Marshal.load(Marshal.dump(obj))
end

परिणाम:

deep_copy(food).map(&:object_id) # [42975648, 42975624, 42975612]

लैम्ब्डा को कॉल करने के विभिन्न तरीके

my_lambda = -> { puts 'Hello' }

my_lambda.call
my_lambda[]
my_lambda.()
my_lambda.===

यदि संभव हो, तो आपको पहले वाले के साथ रहना चाहिए (call ), क्योंकि यह वही है जिसे अधिकांश लोग जानते हैं।

पहले से भरी हुई सरणी बनाना

ऐरे वर्ग एक तर्क + एक ब्लॉक ले सकता है, जो आपको n . के साथ एक सरणी बनाने देता है तत्व डिफ़ॉल्ट रूप से ये तत्व nil हैं , लेकिन अगर आपके पास कोई ब्लॉक है, तो मान उससे आएंगे।

उदाहरण :

Array.new(10) { rand 300 }

यह 10 यादृच्छिक संख्याओं के साथ एक सरणी उत्पन्न करेगा जो 0 और 299 के बीच है।

सत्य, असत्य और शून्य वस्तुएं हैं

true.class  # TrueClass
false.class # FalseClass
nil.class   # NilClass

इन वस्तुओं की केवल एक प्रति है, और यदि आप चाहें तो भी अधिक नहीं बना सकते हैं।

यह क्रिया में सिंगलटन पैटर्न है।

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

my_lambda = ->(a, b)  { a + b }
my_proc   = Proc.new  { |a, b| a + b }

my_lambda.call(2)
# ArgumentError: wrong number of arguments (1 for 2)

my_proc.call(2)
# TypeError: nil can't be coerced into Fixnum

बिना irb या फ़ाइलों के सीधे कोड निष्पादित करें

ruby कमांड में कई दिलचस्प विकल्प हैं जिनका आप उपयोग कर सकते हैं।

उदाहरण के लिए, -e . के साथ फ़्लैग जिसे आप निष्पादित करने के लिए कोड के एक स्निपेट में पास कर सकते हैं।

ruby -e '5.times { puts "Fun with Ruby" }'

आप -h . का उपयोग करके अधिक जानकारी प्राप्त कर सकते हैं झंडा।

एक कमांड में आपका अपना मिनी-आईआरबी

कभी जानना चाहा कि कैसे irb काम करता है? खैर, यह इसका अति-सरल संस्करण है।

याद रखें कि 'आरईपीएल' का क्या अर्थ है:रीड-एवल-प्रिंट लूप।

ruby -n -e 'p eval($_)'

आपको कोई संकेत नहीं मिलेगा, लेकिन आगे बढ़ें और कुछ रूबी कोड टाइप करें।

"A" * 5
"AAAAA"

यह काम करता है क्योंकि -n झंडा यह करता है:

-n    assume 'while gets(); ... end' loop around your script

और $_ एक वैश्विक चर है। जिसमें निम्नलिखित शामिल हैं:

The last input line of string by gets or readline.

ऑब्जेक्ट को अनफ्रीज करें (खतरे!)

किसी ऑब्जेक्ट को अनफ़्रीज़ करने के लिए कोई रूबी विधि नहीं है, लेकिन Fiddle . का उपयोग करके ऐसा करने के लिए आप रूबी इंटर्नल में कक्षा तक पहुंच सकते हैं।

require 'fiddle'

str = 'water'.freeze
str.frozen? # true

memory_address = str.object_id * 2

Fiddle::Pointer.new(memory_address)[1] &= ~8

str.frozen? # false

इसे घर पर न आजमाएं!

विशेष पहचान वाली वस्तुएं

रूबी ऑब्जेक्ट्स में एक पहचानकर्ता या 'आईडी' नंबर होता है जिसे आप object_id . का उपयोग करके एक्सेस कर सकते हैं तरीका। कुछ वस्तुओं की एक निश्चित आईडी होती है:फिक्सनम्स, सही, गलत और शून्य।

false.object_id # 0
true.object_id  # 2
nil.object_id   # 4

1.object_id # 3
2.object_id # 5

फिक्सनम आईडी इस सूत्र का उपयोग करते हैं:(संख्या * 2) + 1.

बोनस:अधिकतम फिक्सनम 1073741823 . है , उसके बाद आपको एक बिग्नम ऑब्जेक्ट मिलता है।

irb या pry में बड़े आउटपुट से बचें

अगर आप irb . में काम कर रहे हैं और अपनी स्क्रीन को कुछ बहुत बड़ी सरणी या स्ट्रिंग की सामग्री से भरने से बचना चाहते हैं जिसे आप बस जोड़ सकते हैं ; आपके कोड के अंत में।

उदाहरण :

require 'rest-client'

RestClient.get('www.rubyguides.com');

; . के बिना पुन:प्रयास करें अंतर देखने के लिए 🙂

वर्तमान कॉल स्टैक प्राप्त करने के लिए कॉलर विधि का उपयोग करना

यहां एक कोड उदाहरण दिया गया है:

def foo
  bar
end

def bar
  puts caller
end

foo

आउटपुट :

-:3:in 'foo'
-:10:in '<main>'

यदि आपको वर्तमान विधि नाम की आवश्यकता है तो आप __method__ . का उपयोग कर सकते हैं या __callee__

बोनस! किसी भी मान को बूलियन में बदलें

!!(1)   # true
!!(nil) # false

बोनस! कीवर्ड को वैरिएबल नाम के रूप में इस्तेमाल करें

def foo (if: nil)
  binding.local_variable_get(:if)
end

foo(if: true)

सारांश

मुझे आशा है कि आपको ये रूबी ट्रिक्स पसंद आई होंगी!

उन्हें अपने दोस्तों के साथ साझा करें ताकि वे भी उनका आनंद उठा सकें और मेरे ब्लॉग की सदस्यता लें नीचे दिए गए फॉर्म में ताकि आप मेरी अगली पोस्ट को मिस न करें।


  1. परमाणु संपादक:रूबी डेवलपर्स के लिए ट्रिक्स, प्लगइन्स और शॉर्टकट!

    यदि आप रूबी विकास के लिए एटम का उपयोग कर रहे हैं तो आप शायद जानते हैं कि प्लगइन्स हैं (packages एटम में) जो संपादक के साथ आपकी उत्पादकता में सुधार कर सकता है। लेकिन एटम के पैकेज रिपॉजिटरी में हजारों पैकेज हैं! आपको किनका उपयोग करना चाहिए? और इसके अलावा, कुछ उपयोगी कीबोर्ड शॉर्टकट क्या हैं जिनका

  1. रूबी कॉन्स्टेंट्स के बारे में आपको जो कुछ पता होना चाहिए

    रूबी में स्थिरांक क्या है? एक स्थिरांक एक प्रकार का चर है जो हमेशा एक बड़े अक्षर से शुरू होता है। उन्हें केवल बाहर परिभाषित किया जा सकता है विधियों की, जब तक कि आप मेटाप्रोग्रामिंग का उपयोग नहीं करते। स्थिरांक का उपयोग उन मूल्यों के लिए किया जाता है जिन्हें बदलना नहीं चाहिए, लेकिन रूबी आपको उन्हें

  1. Apple TV 4K:10 टिप्स और ट्रिक्स जो आपको जरूर जाननी चाहिए

    क्या आपको नया Apple TV मिला है? पढ़ते रहिये! Apple को अपना पहला Apple TV जारी किए हुए कुछ समय हो गया है। हालाँकि, समय बीतने और प्रौद्योगिकी में प्रगति के साथ, Apple प्रत्येक उत्तराधिकारी के साथ स्पष्ट रूप से विकसित हुआ है। उन सभी में नवीनतम हाल ही में जारी किया गया Apple TV 4K है। Apple TV 4K एक अत