НАСТРОЙКА Win7 64b, R2015b, 16 ГБ ОЗУ, CPU i7-2700
table()
представляет собой основной класс Matlab, который также запечатан, поэтому я не могу подклассифицировать его.
Я хочу исправить некоторые методы этого класса и добавить новые.
Например, table.disp()
фундаментально нарушена, например. попробуйте NOT disp(table(rand(1e7,1)))
или забудьте ;
в окне команд. Переменная занимает всего ОЗУ 76 МБ, но дисплей небуферизирован, и он остановит вашу систему!
- Могу ли я переопределить методы, такие как
table.disp()
, не записывая вmatlabroot\toolbox\matlab\datatypes\@table
? -
Можно ли расширить класс таблицы с помощью нового метода в
C:\MATLAB\@table\ismatrixlike.m
? Почему я получаюismatrixlike(table) Undefined function 'ismatrixlike' for input arguments of type 'table'.
Очевидно, я сделал
addpath C:\MATLAB\ rehash toolboxcache
Я также пробовал
clear all
.Путь имеет (алфавитный) приоритет над
matlabroot
, но отсутствует определение классаtable.m
. Если я добавлю определение собственного класса наC:\MATLAB\@table
, тогда я могу запустить свой новый метод (послеclear all
). Однако:>> methods(table) Methods for class table: classVarNames ismatrixlike table varfun convertColumn renameVarNames unstack
перечисляет только методы в новой папке
\@table
, хотя (некоторые из) старых методов все еще работают, например.size(table)
Это частично решает проблему, так как теперь родная папка
\@table\private
больше недоступна, и поэтому многие собственные методы нарушены!
Почему я это делаю? Потому что я не хочу ждать еще 2 года до того, как будет зафиксирован table()
. Я уже потерял целые дни, потому что просто забыл о ;
в командном окне, и я не могу принудительно перезагрузить компьютер, если он запускает многопользовательские симуляции, но мне нужно дождаться завершения замены диска: (.
Приложение
Больше контекста о disp(table(rand(1e7,1)))
. Это то, что происходит, когда я ударил его (и, к счастью, я достаточно быстро добрался до CTRL-C):
Виной является строка 172 table.disp()
, которая преобразует числовой массив в клетку (с дополнением тоже!):
[cells, err, isLeft] = sprintfc(f, x, b);