2017-03-09 5 views
5

MATLAB R2016a ने किसी ऑब्जेक्ट के गुणों की कक्षा को प्रतिबंधित करने के लिए एक दस्तावेज तंत्र प्रस्तुत किया (मुझे पता है कि ऐसा करने के लिए एक पुराना, अलग, अनियंत्रित तरीका भी है, लेकिन मैं नहीं हूं उस विधि का उपयोग कर)। उदाहरण के लिए:MATLAB: गुणों की प्रतिबंधित श्रेणी की खोज

classdef MyClass 
    properties 
     myProperty RestrictedClass 
    end 
end 

संपत्ति myProperty प्रतिबंधित ताकि अपने मूल्यों वर्ग RestrictedClass का होना चाहिए होगा।

यदि आपने ऐसी कक्षा लागू की है, तो क्या प्रतिबंधित संपत्ति के वर्ग को प्रोग्रामेटिक रूप से खोजने के लिए MATLAB के क्लास मेटाडाटा इंटरफ़ेस का उपयोग करने का कोई तरीका है?

मुझे उम्मीद थी कि अगर मैं

m = ?MyClass; 
p = m.PropertyList(1); 

इस्तेमाल किया तो metaproperty वस्तु p वर्ग के बारे में जानकारी होती है जो कि यह प्रतिबंधित था - लेकिन यह नहीं लगता है।

क्या प्रोग्रामेटिक रूप से इसे खोजने का कोई तरीका है? इस विधि को वास्तव में वर्ग को तुरंत चालू करने की आवश्यकता नहीं होगी - दोनों क्योंकि इसका साइड इफेक्ट हो सकता है, और यह भी क्योंकि क्योंकि इसे सार कक्षाओं के साथ काम करने की आवश्यकता होगी।

पीएस कक्षा के स्रोत कोड को पार्स करने की तरह कुछ भी शामिल नहीं है। कल्पना कीजिए कि मैं इसे कक्षा के साथ ऐसा करना चाहूंगा जिसका स्रोत कोड pcode का उपयोग करके obfuscated किया गया था।

उत्तर

0

ऑब्जेक्ट के गैर-सार्वजनिक गुणों का निरीक्षण करने के लिए आप किसी ऑब्जेक्ट को किसी संरचना में परिवर्तित करने के अनियंत्रित हैक का उपयोग कर सकते हैं।

Validation with properties: 

       Class: [1×1 meta.class] 
        Size: [1×0 meta.ArrayDimension] 
    ValidatorFunctions: {1×0 cell} 
किसी दिए गए उदाहरण के वर्ग के साथ

:

:

classdef SOcode 
    properties 
     myProperty1 double 
     myProperty2 struct 
    end 
end 

हम निम्नलिखित की तरह कुछ कर सकते हैं meta.Property वस्तुओं एक छिपा meta.Validation वस्तु संपत्ति है, जो संपत्ति के लिए मान्यता जानकारी नहीं है शामिल

SOcodemeta = ?SOcode; 

nprops = numel(SOcodemeta.PropertyList); 
validationclass = cell(nprops, 1); 

warning('off', 'MATLAB:structOnObject'); 
for ii = 1:nprops 
    fullpropmeta = struct(SOcodemeta.PropertyList(ii)); 
    validationclass{ii} = fullpropmeta.Validation.Class.Name; 
end 
warning('on', 'MATLAB:structOnObject'); 

और प्राप्त करें:

>> validationclass 

validationclass = 

    2×1 cell array 

    {'double'} 
    {'struct'} 
संबंधित मुद्दे