एक (थोड़ा) कम भ्रामक इस लिखने के लिए तरीका है:
str.split(/',\s*'/).map do |match|
if match[0] == ?,
match
else
"some string"
end
end.join
मुझे लगता है कि बहु त्रिगुट बयान भयानक हैं, खासकर जब से if
ब्लॉक रूबी में लौट सकते हैं।
शायद सबसे भ्रमित चीज ?,
है जो एक वर्ण शाब्दिक है। रुबी 1.8 में इसका मतलब है कि चरित्र के ASCII मूल्य (इस मामले में 44
), रुबी 1.9 में यह केवल एक स्ट्रिंग है (इस मामले में ","
)।
केवल ","
के बजाय वर्ण अक्षर का उपयोग करने का कारण यह है कि रूबी 1.9 में एक स्ट्रिंग पर []
को कॉल करने का वापसी मूल्य बदल गया है। In 1.8 it returned the ASCII value of the character at that position, in 1.9 it returns a single-character string। ?,
का उपयोग करके रूबी 1.8 & 1.9 के बीच String#[]
में मतभेदों के बारे में चिंता करने से बचा जाता है।
आखिरकार सशर्त जांच कर रहा है कि match
में पहला अक्षर ,
है, और यदि ऐसा है तो यह मान को समान रखता है, अन्यथा यह "some string"
पर सेट होता है।
स्रोत
2012-03-15 02:09:05
धन्यवाद @AndrewMarshall, अगर यह 'match == (?,) था तो इससे मदद मिलेगी? मैच: "कुछ स्ट्रिंग" '? या इसका मतलब कुछ और होगा? – ismail
@IsmailTabtabai यह वही होगा। जब भी मैं टर्नरी स्टेटमेंट करता हूं, मैं आमतौर पर पूरे सशर्त कथन को ब्रांड्स में लपेटता हूं ताकि यह स्पष्ट हो सके कि यह कहां है, लेकिन यह सिर्फ शैली है। चरित्र अक्षर शायद रूबी के कम ज्ञात वाक्य रचनात्मक संरचनाओं में से एक हैं, और जब आप नहीं जानते कि यह क्या है (विशेष रूप से जब अन्य 'के साथ जोड़ा जाता है) तो बहुत भ्रमित हो सकता है। –
इसका मतलब एक ही बात है। तो [0] ==? से मिलेंगे? मैच: "कुछ स्ट्रिंग" – Bijan