MATLAB: переопределение методов table ()
НАСТРОЙКА Win7 64b, R2015b, 16 ГБ оперативной памяти, процессор i7-2700
table()
этофундаментальный класс Matlab что такжезапечатанныйследовательно, я не могу подкласс его.
я бы хотелфиксировать некоторые методы этого класса иДобавить новое из них. Например,table.disp()
фундаментально сломан, например Попробуйте не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):
Виновником является линия 172table.disp()
который преобразует числовой массив в строку ячеек (тоже с отступом!):
[cells, err, isLeft] = sprintfc(f, x, b);