वर्षों से, अन्य कोड पढ़ने के बाद, मैंने MATLAB वाक्यविन्यास के कुछ उदाहरणों का सामना किया और एकत्र किया जो पहले असामान्य और counterintuitive पर हो सकता है। कृपया, इस सूची को टिप्पणी करने या पूरक करने के लिए स्वतंत्र महसूस करें। मैंने इसे r2006a के साथ सत्यापित किया।कॉर्नर मामले, अप्रत्याशित और असामान्य MATLAB
MATLAB अपने फोन करने वाले कार्यक्षेत्र में एक समारोह का हमेशा रिटर्न पहले उत्पादन तर्क (अगर यह है कम से कम एक), भी अप्रत्याशित रूप से समारोह myFunc1(); myFunc2();
तरह लौटने तर्क के बिना बुलाया जा रहा है, तो फोन करने वाले कार्यक्षेत्र अभी भी पहले होते हैं myFunc2();
का आउटपुट "अदृश्य" ans
चर के रूप में। यदि ans
एक संदर्भ वस्तु है तो यह एक महत्वपूर्ण भूमिका निभा सकता है - यह जीवित रहेगा।
set([], 'Background:Color','red')
MATLAB कभी कभी बहुत क्षमाशील है। इस मामले में, ऑब्जेक्ट्स की सरणी में गुणों को सेट करना, कम से कम जब सरणी खाली होती है, तो बकवास गुणों के साथ भी काम करता है। इस तरह की सरणियों आमतौर पर आ harray = findobj(0,'Tag','NotExistingTag')
myArray([1,round(end/2)])
से end
कीवर्ड का यह प्रयोग अशुद्ध लगते हैं, लेकिन कभी कभी बहुत बजाय length(myArray)
का उपयोग करने का काम हो सकता है।
any([]) ~= all([])
Surprisigly any([])
रिटर्न false
और all([])
रिटर्न true
। और मैंने हमेशा सोचा कि all
मजबूत है तो any
।
संपादित करें:
मूल्यों के उपसमूह के लिए साथ नहीं खाली तर्क all()
रिटर्न true
जिसके लिए any()
रिटर्न true
(जैसे सच तालिका)। इसका मतलब है कि any()
false
का अर्थ all()
false
है। इस सरल नियम का उल्लंघन MATLAB द्वारा []
के साथ तर्क के रूप में किया जा रहा है।
लॉरेन भी blogged about it।
Select(Range(ExcelComObj))
प्रक्रियात्मक शैली COM वस्तु विधि प्रेषण। आश्चर्य मत करो कि exist('Select')
शून्य लौटाता है!
[myString, myCell]
MATLAB इस मामले में स्ट्रिंग चर myString
कोशिका प्रकार {myString}
के एक अंतर्निहित डाली बनाता है। यह काम करता है, भले ही मैं ऐसा करने की अपेक्षा नहीं करता।
[double(1.8), uint8(123)] => 2 123
एक और उदाहरण डाली। सभी शायद uint8
मूल्य double
पर डाले जाने की उम्मीद करेंगे लेकिन गणित की एक और राय है।चेतावनी के बिना यह व्यवहार बहुत खतरनाक है।
a = 5;
b = a();
यह मूर्खतापूर्ण लग रहा है, लेकिन आप दौर ब्रैकेट के साथ एक चर कॉल कर सकते हैं। असल में यह समझ में आता है क्योंकि इस तरह आप अपने हैंडल दिए गए फ़ंक्शन को निष्पादित कर सकते हैं।
सिंटेक्स Foo(:)
डेटा पर, लेकिन यह भी काम करता है अगर, Bar.Foo(:)
के रूप में बुलाया इस परिदृश्य में समारोह इनपुट तर्क चार बृहदान्त्र':'
के रूप में पारित हो जाता है के साथ न केवल काम करता है।
उदाहरण के लिए Bar.Foo = @(x) disp(x)
अब MATLAB कमांड विंडो में Bar.Foo(:)
प्रिंट ':'
पर कॉल करें।
यह अजीब विशेषता चेतावनियों के बिना सभी MATLAB 7 संस्करणों के साथ काम करती है।
a = {'aa', 'bb'
'cc', 'dd'};
Surprsisingly इस कोड को न तो एक वेक्टर देता है और न ही एक त्रुटि बढ़ जाता है लेकिन मैट्रिक्स defins, बस कोड लेआउट का उपयोग कर। यह शायद प्राचीन काल से एक रिश्ते है।
संपादित करें: बहुत आसान सुविधा, gnovice द्वारा टिप्पणी देखें।
set(hobj, {'BackgroundColor','ForegroundColor'},{'red','blue'})
इस कोड को आप शायद यह क्या करने की आशा करता है। यह कार्य set
एक स्ट्रक्चर स्वीकार करता है क्योंकि इसका दूसरा तर्क एक ज्ञात तथ्य है और समझ में आता है, और यह सिंटैक्स सिर्फ cell2struct
दूर है।
समीकरण नियम कभी-कभी अप्रत्याशित होते हैं। उदाहरण के लिए 'A'==65
सत्य लौटाता है (हालांकि सी-विशेषज्ञों के लिए यह स्वयं स्पष्ट है)। इसी तरह isequal([],{})
अपेक्षित, false
और isequal([],'')
true
लौटाता है।
स्ट्रिंग-न्यूमेरिक तुल्यता मतलब है कि सभी स्ट्रिंग काम करता है, संख्यात्मक सरणियों के लिए भी इस्तेमाल किया जा सकता है, उदाहरण के एक बड़े सरणी में एक उप सरणी के सूचकांक को खोजने के लिए:
ind = strfind([1 2 3 4 1 2 3 4 1 2 3 4 ], [2 3])
MATLAB समारोह isnumeric()
बूलियन के लिए false
लौटाता है। यह सिर्फ लगता है ... झूठी :-)
जो के बारे में आगे अप्रत्याशित/असामान्य MATLAB सुविधाओं कि आप जानते हैं?
मेरा मानना है कि इस मामले में सामुदायिक विकी की आवश्यकता है, क्योंकि यह मूल रूप से "सूची-संकलन" सर्वेक्षण प्रश्न है। – gnovice
@gnovice: समुदाय विकी – Mikhail
में बदल गया "आश्चर्यजनक रूप से कोई भी ([]) झूठा लौटाता है और सभी ([]) सत्य लौटते हैं।" मुझे समझ में नहीं आता कि इस बारे में क्या आश्चर्यजनक है; मुझे यह पूरी तरह से स्पष्ट लगता है। – Timwi