कार्यकारी सारांश:
वहाँ आर के लिए केवल दो तरीके पता चला है कि एक और को खंड यह ऊपर है, तो खंड के अंतर्गत आता है कर रहे हैं:
- पूरे करता है, तो ... किसी और बयान (और शायद अन्य बयान भी) ब्रेसिज़ में संलग्न है;
- शब्द अन्य खंड के अंत के समान रेखा पर दिखाई देता है।
साक्ष्य:
उपरोक्त चर्चा मुझे मदद मिली है, लेकिन मुझे आशा है कि मैं एक उपयोगी वक्रोक्ति पेशकश कर सकते हैं। हाँ, यह सही है कि
f <- function (exp)
if (exp)
1
else
2
अतीत 1. दो तरीके पढ़ने रखने के लिए आर की विफलता की वजह से क्लासिक Error: unexpected 'else' in "else"
संदेश के साथ विफल रहता है सही ढंग से अनुसंधान पिछले 1 पढ़ना जारी रखते हैं बनाने के लिए की पेशकश की गई है:
f <- function (exp) {
if (exp)
1
else
2
}
और
f <- function (exp) if (exp) 1 else 2
लेकिन वहाँ एक तीसरा रास्ता अभी तक का उल्लेख नहीं किया --- सिर्फ एक लाइन अप else
के लिए कदम है। इस प्रकार, निम्नलिखित भी काम करता है क्योंकि आर पिछले 1 पढ़ने रखने के लिए जानता है:
f <- function (exp)
if (exp)
1 else
2
मुझे लगता है कि प्रमुख मुद्दा या तो समारोह के पूरे शरीर को संभालो, या सुनिश्चित करें else
के रूप में एक ही लाइन पर होता है बनाने के लिए है अगर खंड जारी है तो आर पढ़ने के लिए जानता है। यही कारण है कि एक लाइन समाधान काम करता है।
f <- function (exp)
if (exp) {
1
} else
2
लेकिन यह विफल रहता है: यह भी कारण है कि इस काम करता है
f <- function (exp)
if (exp) {
1
}
else
2
और समारोह शरीर के अधिक मानक ब्रेसिंग का उपयोग कर, यह भी काम करता है:
f <- function (exp) {
if (exp) {
1
}
else
2
}
लेकिन चाहे या हम एक समारोह का निर्माण नहीं कर रहे हैं एक लाल हेरिंग है। क्या मायने रखता है केवल else
का ब्रेसिज़ और स्थान है। इस प्रकार, इन काम:
{
if (exp) {
1
}
else
2
}
if (exp) {
1
} else
2
लेकिन यह विफल रहता है:
if (exp) {
1
}
else
2
और शीर्ष पर मेरी अभिकथन 1 प्रदर्शित करने के लिए, इस काम करता है:
{
x <- 4
if (exp)
1
else
2
}
मुझे यकीन है कि आप के बारे में बताया क्यों नहीं कर रहा हूँ multiline 'if ... else ... 'को एक कथन के रूप में व्याख्या किया जाता है जब यह फ़ंक्शन के शरीर के अंदर होता है। ऐसा इसलिए होता है क्योंकि जब आप 'f <- function (exp = T) टाइप करते हैं {', आर पढ़ना जारी रखने जा रहा है जब तक कि संपूर्ण ब्लॉक मिलान के साथ बंद न हो'' '। इससे दुभाषिया को यह पता चल जाएगा कि 'अन्य' उपरोक्त शुरू होने वाली 'if'' की निरंतरता है। सही? – flodel
@flodel आह हाँ, मुझे यह स्पष्ट करने की आवश्यकता हो सकती है। लेकिन आपका अनुमान स्पॉट-ऑन है। और अनुमान लगाएं कि जब आप फ़ंक्शन बॉडी के चारों ओर ब्रेसिज़ को हटाते हैं तो क्या होता है ... ;-) –