2013-04-13 8 views
69

मैं रुबी में सशर्त रूप से एक चर सेट करने की कोशिश कर रहा हूं। यदि यह चर शून्य या खाली है (0 लंबाई स्ट्रिंग) तो मुझे इसे सेट करने की आवश्यकता है। मैं निम्नलिखित के साथ आया हूं:खाली या शून्य-मूल्य स्ट्रिंग के लिए परीक्षण

variable = id if variable.nil? || (!variable.nil? && variable.empty?) 

हालांकि यह काम करता है, यह मेरे लिए बहुत रूबी जैसा प्रतीत नहीं होता है। उपरोक्त को व्यक्त करने का एक और संक्षिप्त तरीका है?

+0

"रूबी रास्ता" स्थिति में नहीं प्राप्त करने के लिए किया जाएगा विधि आप देख रहे हैं होना चाहिए तार। यदि जो भी फ़ंक्शन इस डेटा को वापस कर रहा है, तो वह "खाली" मान वापस कर सकता है, यह 'nil' वापस नहीं होना चाहिए, न कि' '"। – meagar

उत्तर

140

दूसरे खंड एक !variable.nil? जांच करता है, तो मूल्यांकन उस बिंदु तक पहुँच जाता है, variable.nil (short-circuiting की वजह से) झूठे होने की गारंटी है की जरूरत नहीं है।

यह पर्याप्त होना चाहिए:

एक वस्तु खाली, खाली है अगर यह बात गलत है:

variable = id if variable.nil? || variable.empty? 

आप रूबी ऑन रेल्स के साथ काम कर रहे हैं, Object.blank? इस सटीक समस्या का हल , या एक सफेद जगह स्ट्रिंग। उदाहरण के लिए, "", " ", nil, [], और {} सभी खाली हैं।

+4

बिल्कुल सही, मुझे यही चाहिए ('Object.blank')। रूबी और रेल हमेशा मुझे ज़ेन के साथ सादगी की तरह आश्चर्यचकित करते हैं। धन्यवाद! :) –

+0

यह समाधान 'variable = 3 पी चर = 5 के लिए variable.nil के लिए काम नहीं करेगा? || variable.empty? ' –

+1

यह मानता है कि @ रिचर्डब्रॉउन गलती से एक पूर्णांक नहीं डालता है, जिसे वह स्ट्रिंग वैरिएबल होने की अपेक्षा करता है, हां। –

40

आप रेल .blank में हैं?

a = nil 
b = [] 
c = "" 

a.blank? #=> true 
b.blank? #=> true 
c.blank? #=> true 

d = "1" 
e = ["1"] 

d.blank? #=> false 
e.blank? #=> false 

तो जवाब होगा:: जहां निल्स और खाली का एक मिश्रण है

variable = id if variable.blank? 
संबंधित मुद्दे