बस सोच रहा है कि !!
रूबी में है।क्या करता है !! रूबी में मतलब है?
उत्तर
नहीं। यह एक बूलियन के लिए एक मूल्य कन्वर्ट करने के लिए प्रयोग किया जाता है:
!!nil #=> false
!!"abc" #=> true
!!false #=> false
यह आमतौर पर है, हालांकि उपयोग करने के लिए के बाद से रूबी के लिए एक ही झूठी मान nil
और false
हैं आवश्यक नहीं है, तो यह है कि सम्मेलन स्टैंड जाने के लिए आमतौर पर सबसे अच्छा है। के रूप में
!(!some_val)
एक बात यह है कि यह वैध तरीके से लौटाए जाने से डेटा की एक बड़ी हिस्सा रोक रहा है के लिए इस्तेमाल किया इसके बारे में
Think। उदाहरण के लिए आप शायद अपने has_image?
विधि में 3 एमबी छवि डेटा वापस नहीं करना चाहते हैं, या आप logged_in?
विधि में अपना संपूर्ण उपयोगकर्ता ऑब्जेक्ट वापस नहीं करना चाहेंगे। !!
का उपयोग इन वस्तुओं को एक साधारण true
/false
में परिवर्तित करता है।
यह रिटर्न true
अगर सही पर वस्तु nil
और नहीं false
, false
अगर यह होता है nil
या false
def logged_in?
[email protected]_user
end
ध्यान दें कि यह मुहावरा के साथ-साथ अन्य प्रोग्रामिंग भाषाओं में मौजूद नहीं है। सी में एक आंतरिक bool
प्रकार नहीं था, इसलिए 0
या 1
के कैनोलिक मानों के साथ, सभी बूलियन को int
के रूप में टाइप किया गया था। इस उदाहरण (कोष्ठकों स्पष्टता के लिए जोड़ा) ले जाता है:
!(1234) == 0
!(0) == 1
!(!(1234)) == 1
"नहीं-नहीं" वाक्य रचना 1
, विहित बूलियन सही मूल्य के लिए किसी भी गैर शून्य पूर्णांक बदल देता है।
सामान्य में, हालांकि, मैं यह ज्यादा बेहतर एक उचित तुलना में डालने के लिए की तुलना में इस असामान्य मुहावरा उपयोग करने के लिए लगता है:
int x = 1234;
if (!!x); // wtf mate
if (x != 0); // obvious
या बस अगर (x)। !! जब आपको 0/1 प्राप्त करने की आवश्यकता होती है तो उपयोगी होता है। आप (x) पर विचार कर सकते हैं या नहीं कर सकते हैं? 1: 0 स्पष्ट। – derobert
!
साधन नकारना बूलियन राज्य, दो !
कुछ भी नहीं विशेष, एक के अलावा अन्य है डबल अस्वीकृति
!true == false
# => true
यह आमतौर पर एक बूलियन लौटने के लिए एक विधि को मजबूर करने के लिए उपयोग किया जाता है। यह किसी भी प्रकार की सच्चाई का पता लगाएगा, जैसे स्ट्रिंग, पूर्णांक और क्या नहीं, और इसे एक बुलियन में बदल दें।
!"wtf"
# => false
!!"wtf"
# => true
एक और अधिक वास्तविक उपयोग के मामले:
def title
"I return a string."
end
def title_exists?
!!title
end
यह उपयोगी है जब आप यह सुनिश्चित करें कि एक बूलियन दिया जाता है बनाना चाहते हैं। IMHO यह एक प्रकार का व्यर्थ है, हालांकि, यह देखते हुए कि if 'some string'
और if true
सटीक समान प्रवाह है, लेकिन कुछ लोगों को यह स्पष्ट रूप से एक बूलियन लौटने के लिए उपयोगी लगता है।
यह मुझे एक कथन कथन या एक टर्नरी ऑपरेटर का उपयोग करने की तुलना में बस एक तेज़ तरीका की तरह लगता है। चूंकि आप केवल 'शीर्षक' वापस नहीं कर सकते हैं, साथ ही साथ निकटतम चीज़ भी कर सकते हैं ... मुझे लगता है कि –
यदि आपको exclusive or करने की आवश्यकता है तो यह उपयोगी है।मामूली परिवर्तनों के साथ मैट वान हॉर्न के जवाब से प्रतिलिपि बनाई जा रही:
1^true
TypeError: can't convert true into Integer
!!1^!!true
=> false
मैं इसे इस्तेमाल किया दो चर सुनिश्चित करने के लिए या तो दोनों नहीं के बराबर है, या दोनों शून्य नहीं थे।
raise "Inconsistency" if !!a^!!b
समझना यह कैसे काम करता उपयोगी हो सकता है अगर आप कन्वर्ट करने के लिए कहते हैं कि एक बूलियन में एक गणना की जरूरत है,,। मुझे लगता है कि है कि वास्तव में करता है, classy_enum
मणि का उपयोग कर कोड है:
class LinkStatus < ClassyEnum::Base
def !
return true
end
end
class LinkStatus::No < LinkStatus
end
class LinkStatus::Claimed < LinkStatus
def !
return false
end
end
class LinkStatus::Confirmed < LinkStatus
def !
return false
end
end
class LinkStatus::Denied < LinkStatus
end
फिर सेवा कोड में मैं है, उदाहरण के लिए:
raise Application::Error unless !!object.link_status # => raises exception for "No" and "Denied" states.
प्रभावी ढंग से bangbang ऑपरेटर क्या मैं अन्यथा के रूप में लिखा हो सकता है बन गया है to_bool नामक एक विधि।
यह "डबल-नकारात्मक" है, लेकिन अभ्यास को निराश किया जा रहा है। यदि आप rubocop का उपयोग कर रहे हैं, तो आप इसे Style/DoubleNegation
उल्लंघन के साथ इस तरह के कोड पर शिकायत करेंगे।
rationale कहता है:
इस रूप में दोनों गुप्त और आमतौर पर अनावश्यक है, यह से बचा जाना चाहिए है [तो टीका:] बदलें
!!something
!something.nil?
को
लेकिन ... '' '!! !! झूठी # => झूठी''' जबकि ' '' ! false.nil? # => सत्य''' – Doug
- 1. रूबी: क्या में "पी * 1..10" तारांकन करता है मतलब
- 2. क्या करता है: :: सी ++ में मतलब है?
- 3. क्या करता है: = vb.net में मतलब है?
- 4. क्या करता है "स्लग" मतलब
- 5. रूबी में% {} क्या करता है?
- 6. क्या करता है? एंड्रॉयड एक्सएमएल में मतलब
- 7. वाक्यविन्यास क्या है? इस रूबी उदाहरण में मतलब है?
- 8. -D_XOPEN_SOURCE क्या करता है/मतलब है?
- 9. क्या class_eval << करता है - "end_eval", __FILE__, __LINE__ रूबी में क्या मतलब है?
- 10. jQuery में, $ .fn क्या करता है। क्या मतलब है?
- 11. क्या ऑपरेटर करता है '=>' सी # में क्या मतलब है?
- 12. रूबी में "=>" क्या मतलब है और यह कैसे काम करता है?
- 13. डबल क्या करता है? सी # में मतलब है?
- 14. क्या करता है "$$" खोल स्क्रिप्ट में मतलब है?
- 15. "|" क्या करता है एक टर्मिनल कमांड लाइन में मतलब है?
- 16. क्या करता है! जावास्क्रिप्ट में कार्य का मतलब है?
- 17. क्या करता है | 5 ई | सामान्य लिस्प में मतलब है?
- 18. '$?' क्या करता है एक शेल स्क्रिप्ट में मतलब है?
- 19. क्या "@" करता है ग # में इसका मतलब है
- 20. प्रतीक "#!" क्या करता है पायथन में मतलब है?
- 21. क्या करता है! == PHP में तुलना ऑपरेटर का मतलब है?
- 22. क्या करता है !! उद्देश्य-सी में मतलब है
- 23. क्या करता है ?? ऑपरेटर का मतलब सी # में है?
- 24. क्या करता है "typedef शून्य (* कुछ)()" मतलब
- 25. ग्रोवी, क्या करता है -> मतलब
- 26. @ क्या करता है! मतलब से एक स्टेटमेंट
- 27. डबल * (* पी [3]) (शून्य * (*)()) क्या करता है; क्या मतलब है?
- 28. क्या करता = ~ पर्ल में मतलब
- 29. :: सी ++ में :: मतलब क्या है?
- 30. सी = # में क्या मतलब है?
तो यह एक डबल नकारात्मक है? – Ross
इसका उपयोग करने के लिए यह एक बुरा अभ्यास नहीं है। एक स्पष्ट रूप से बुलियन मूल्य वापस करने के लिए डबल बैंग अक्सर भविष्यवाणियों (अंत में समाप्त होने वाली विधियों) में उपयोग किया जाता है। – Swanand
एलेक्स, आपको बड़ी वस्तुओं को वापस करने के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि रूबी एक संदर्भ वापस करेगा, न कि ऑब्जेक्ट की एक प्रति। – DSimon