2016-10-03 15 views
5

Trong Matlab R2016b, hiển thị các biến của một số loại dữ liệu nhất định hiển thị thông tin về loại. Điều này xảy ra khi biến được hiển thị bằng cách nhập nó mà không có dấu chấm phẩy cuối cùng (nó không xảy ra khi sử dụng hàm disp).Quay lại định dạng hiển thị cũ trong Matlab R2016b

Hãy so sánh ví dụ:

  • Matlab R2015b (định dạng cũ: chỉ hiển thị dữ liệu):

    >> x = [10 20 30] 
    x = 
        10 20 30 
    >> x = {10 20 30} 
    x = 
        [10] [20] [30] 
    >> x = [false false true] 
    x = 
        0  0  1 
    
  • Matlab R2016b (định dạng mới: bao gồm loại):

    >> x = [10 20 30] 
    x = 
        10 20 30 
    >> x = {10 20 30} 
    x = 
        1×3 cell array 
        [10] [20] [30] 
    >> x = [false false true] 
    x = 
        1×3 logical array 
        0 0 1 
    

Như bạn thấy, ở đó 's một dòng phụ trong R2016b nói với loại. Dường như điều này xảy ra với bất kỳ loại nào không phải là double hoặc char.

Có một số cài đặt trong R2016b để quay lại hoạt động cũ không?

+1

Ohhh đi trên Luis, đây là một tính năng thực sự tốt đẹp !! : P –

+4

@AnderBiguri Nhưng nó làm cho cảm thấy như tôi không ở nhà nữa :-) –

+0

đã cố gắng đào một chút vào các propertes groot? Tôi chưa có phiên bản mới nhất. – thewaywewalk

Trả lời

3

Rất tiếc, dường như không có tùy chọn thay đổi hành vi đó. Có (như mọi khi) một chút của một workyound hacky.

Khi bạn bỏ qua dấu chấm phẩy từ một dòng, nó không phải là disp được gọi thay vì display. R2016b dường như đã sửa đổi phương thức display cho kiểu dữ liệu cell để hiển thị một số thông tin loại cùng với chính các giá trị đó.

Rất may, chúng tôi có thể quá tải phương thức display với một cái gì đó trông giống một chút hơn display các bản phát hành trước đó.

Chúng tôi có thể tạo thư mục @cell (ở bất kỳ đâu trên đường dẫn của chúng tôi) và đặt một tệp có tên là display.m bên trong.

@cell/display.m

function display(obj) 
    % Overloaded display function for grumpy old men 

    if strcmpi(get(0, 'FormatSpacing'), 'loose') 
     fprintf('\n%s =\n\n', inputname(1)) 
    else 
     fprintf('%s =\n', inputname(1)) 
    end 
    disp(obj); 
end 

Bây giờ, bất cứ khi nào một mảng di động được hiển thị thiếu do của một trailing dấu chấm phẩy, nó sẽ không bao gồm bất kỳ loại thông tin.

>> c = {'a', 'b'} 

c = 

    'a' 'b' 

Thật không may, có những kiểu dữ liệu khác (chẳng hạn như logical) mà còn hiển thị thông tin loại, do đó bạn sẽ phải quá tải phương pháp display cho mỗi người trong các lớp học.

+0

Cảm ơn! Quá tải 'hiển thị' dường như là cách để đi. Để tránh tái tạo định dạng chính xác được tạo bởi 'display', tôi nghĩ nó có thể tốt hơn (nếu sử dụng' evalc' có thể đủ điều kiện là "tốt hơn") để làm 't = evalc ('builtin (' 'display') ', obj)'); 'Sau đó' t' là một 'char' vectơ mà từ đó đường kẻ phạm lỗi có thể được loại bỏ bằng' regexp' (tôi không thể thử nó ngay bây giờ, như tôi đang ở trên R2015b) –

+0

@LuisMendo Kỳ lạ, 'builtin ('display', c)' không cung cấp cho bạn 'c =' ngay từ đầu nhưng gọi 'display (c)' trực tiếp ... – Suever

+0

True! Nó không có trong R2015b. Vì vậy, tôi nghĩ rằng nó an toàn để giả định nó không nói chung, và thêm nó bằng tay –

Các vấn đề liên quan