динамическое поколение классов - PullRequest
1 голос
/ 10 января 2012

Как динамически создать класс из его содержимого?

На самом деле я создал своего рода создание и выполнение классов движка Matlab, в котором я могу перечислить все файлы классов (* .m) вкаталог, создайте их экземпляр (с помощью 'eval (clasnname)')) и используйте эти объекты.

Теперь я хочу изменить содержимое этих файлов "на лету", а затем создать их и использовать эти новыеобъекты.

Итак, я написал функцию для чтения содержимого файла в строку, замены / добавления некоторого содержимого в эту строку и ... Я не знаю, как создать объект (экземпляр класса) из этой строки (которая содержит 'classdef myClass

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

2 голосов
/ 11 января 2012

MATLAB позволяет изменять экземпляры объектов во время выполнения, добавляя динамические свойства , но вы не можете добавлять методы.

2 голосов
/ 10 января 2012

Я не думаю, что это возможно в MATLAB, в отличие от чисто объектно-ориентированного языка программирования, такого как Ruby. Если бы это было так, то был бы какой-то способ построить объект meta.class, но это не так.

Я думаю, что написание classdef файла - ваш единственный вариант. Возможно, вам потребуется программно вызвать rehash, чтобы заставить его загрузить новое определение, и если существуют существующие объекты, использующие старое определение, то оно вообще не загрузит новое определение, пока вы не очистите все.

Полагаю, реальный вопрос: «Зачем вам это нужно?»

В сторону : используйте feval вместо eval для создания экземпляров вашего нового класса.

0 голосов
/ 05 мая 2012

Да, конечно, вы можете создать динамический класс в Matlab, создав подклассы для dynamicprops, и вы даже можете создать целый класс из строки, например, из файла, JSON или чего-то еще.Смотрите мой пример myDynamicClass на FEX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...