loading .mat file for class that no longer has dynamicprops, but now uses RedefinesDot
5 ビュー (過去 30 日間)
古いコメントを表示
Consider a class which inherits from dynamicprops. i am trying to load a .mat file containing an instance of this class.
The issue is: the class no longer uses dynamicprop but redefinesDot instead.
when the load function is called, i noticed that my DotRefference or dotAssign functions have not been called. But using the properties function i can see that all the old dynamic properties have been set onto the instance.
When trying to access this property, DotRefference is called, which should only happen for unknown properties. Resulting in my being unable to access the data behind these properties.
my ideal case would keep the current class structure, but have some custom loading to support conversion of the old .mat files to this new structure.
Does this sound like a very niche bug to you, or more like inteded incompatibility between dynamicprops and RedefinesDot?
0 件のコメント
回答 (1 件)
Sugandhi
2023 年 8 月 25 日
編集済み: Sugandhi
2023 年 8 月 25 日
Hi,
I understand that when the load function is called, you noticed that DotRefference or dotAssign functions have not been called. But using the properties function you can see that all the old dynamic properties have been set onto the instance.
The issue you are experiencing with loading a .mat file containing an instance of a class that inherits from ‘dynamicprops’ but now uses ‘redefinesDot’ instead is likely due to the incompatibility between these two mechanisms for dynamic properties.
‘dynamicprops’ allows you to dynamically add and remove properties to an object at runtime, while ‘redefinesDot’ provides a way to redefine the behavior of the dot operator (.) for accessing and assigning properties.
When you load a MAT-File that contains an instance of the class, MATLAB restores the object's properties based on their names and values stored in the file. However, since the class has transitioned from using ‘dynamicprops’ to ‘redefinesDot’, the dot operator behavior is not triggered during the loading process. As a result, your ‘DotReference’ and ‘dotAssign’ methods are not called.
This behavior is expected because the loading process does not involve the dot operator (.) for accessing or assigning properties. Instead, it directly sets the properties based on their stored values.
To address this issue and support the conversion of old MAT-Files files to the new class structure, you can implement a custom loading mechanism.
For more understanding, kindly go through following links:
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Argument Definitions についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!