Có điều này là có thể nhưng nó đòi hỏi một chút của tin tặc. Nó đòi hỏi bạn phải sao chép xung quanh một số chức năng xử lý.
Sử dụng ví dụ được cung cấp trong câu hỏi, tôi sẽ chỉ cách bọc hàm openvar
trong hàm do người dùng xác định để kiểm tra kích thước của biến đầu vào và sau đó cho phép người dùng hủy bất kỳ hoạt động mở nào cho các biến quá lớn.
Ngoài ra, điều này sẽ hoạt động khi người dùng nhấp đúp vào một biến trong ngăn Workspace của IDE Matlab.
Chúng tôi cần làm ba việc.
- Lấy một handle của bản gốc
openvar
chức năng
- Xác định chức năng wrapper mà các cuộc gọi
openvar
- Chuyển bản gốc
openvar
tên cho chức năng mới của chúng tôi.
Function Ví dụ
function openVarWrapper(x, vector)
maxVarSize = 10000;
%declare the global variable
persistent openVarHandle;
%if the variable is empty then make the link to the original openvar
if isempty(openVarHandle)
openVarHandle = @openvar;
end
%no variable name passed, call was to setup connection
if narargin==0
return;
end
%get a copy of the original variable to check its size
tmpVar = evalin('base', x);
%if the variable is big and the user doesn't click yes then return
if prod(size(tmpVar)) > maxVarSize
resp = questdlg(sprintf('Variable %s is very large, open anyway?', x));
if ~strcmp(resp, 'Yes')
return;
end
end
if ischar(x) && ~isempty(openVarHandle);
openVarHandle(x);
end
end
Khi chức năng này được xác định sau đó bạn chỉ cần thực hiện một kịch bản mà
- Xóa bất kỳ biến tên
openvar
- chạy kịch bản
openVarWrapper
để thiết lập kết nối
- điểm gốc
openVar
để openVarWrapper
Ví dụ Script:
clear openvar;
openVarWrapper;
openvar = @openVarWrapper;
Cuối cùng khi bạn muốn để làm sạch tất cả mọi thứ lên bạn chỉ có thể gọi:
clear openvar;
Tôi đồng ý với câu trả lời bạn đã đăng trên câu hỏi khác (http://stackoverflow.com/questions/11779511/how-to-interrupt-matlab-ide-when-it-hangs-on-displaying-very-large- mảng) là tốt cho câu hỏi đó slayton, nhưng câu hỏi chung có một câu trả lời tốt hơn - xem dưới đây. – jmetz