Pertanyaan MATLAB "echo on" di dalam fungsi. Apa itu mungkin?


saya membaca dalam dokumentasi bahwa saya bisa menggunakan pernyataan itu echo on; agar MATLAB mencetak pernyataan yang dieksekusi. Namun, saya mengalami kesulitan membuat pekerjaan ini di dalam suatu fungsi.

Sebagai contoh:

function do_something(foo)

a   = 2;
echo on;
foo = foo+1;
disp('This is a test');
foo = foo+3;

end

Jika saya menelepon do_something(foo) dari jendela perintah, saya mengharapkan untuk melihat sesuatu seperti:

foo = foo+1;
disp('This is a test');
This is a test
foo = foo+3;

Namun, dalam contoh di atas, semua cetakan MATLAB adalah:

this is a test

yang tidak seperti yang kuharapkan.

Memperbarui

Seperti @Phonon menjelaskan di bawah ini, echo on hanya untuk skrip (maaf saya melewatkannya!). Namun, saya baca di dokumentasi yang bisa saya aktifkan echo untuk fungsi yang diberikan sebagai berikut:

echo fcnname on

Jadi pertanyaan saya sekarang adalah, apakah ada cara untuk mengaktifkan echo untuk suatu fungsi menggunakan beberapa variasi sintaks di atas sehingga saya melakukan ini (panggilan echo) di dalam suatu fungsi? (variabel yang memegang nama fungsi dalam kasus ini akan disediakan oleh mfilename)

Perbarui 2:

Sejauh yang saya mengerti tidak mungkin untuk mengaktifkan echo untuk fungsi tertentu di dalam fungsi yang sebenarnya. Di antara hal-hal lain, tampaknya MATLAB perlu mengetahui sebelumnya jika fungsi harus dijalankan dalam "mode gema" untuk menghindari penggunaan JIT.


5
2017-11-04 14:15


asal


Jawaban:


Menurut dokumentasi Matlab, yaitu help echo,

ECHO ON menyalakan gema perintah di dalam File-skrip.

Ini tidak akan berfungsi di dalam fungsi. Agar berfungsi untuk fungsi, sesuai dengan file bantuan yang sama,

ECHO ON ALL menyalakan gema perintah di dalam file Fungsi apa pun yang saat ini ada di memori (yaitu, fungsi yang dikembalikan oleh INMEM).

ECHO OFF ALL mengubah mereka semua.

Memperbarui:

Untuk menemukan fungsi mana Anda saat ini, cara terbaik yang saya lakukan adalah menelepon dbstack. Goes agak sebagai berikut:

[S,I] = dbstack;
funcName = S.name;

6
2017-11-04 14:26



echo fcnname on

sama dengan

echo('fcnname','on');

Dengan menggunakan sintaks fungsi panggilan, Anda dapat meneruskan sebuah variabel sebagai gantinya:

echo(found_found, 'on');

1
2017-11-04 14:42



Saya tidak berpikir gema pada karya-karya di dalam fungsi. Anda selalu dapat mengaktifkan gema di luar fungsi meskipun menggunakan metode berikut:

foo = 1;
echo do_something on;
do_something(foo);
echo do_something off;

Satu-satunya alasan untuk tidak menggunakan itu adalah jika Anda hanya ingin bagian dari fungsi Anda ditampilkan dan tidak semua baris. Jika Anda bersikeras melihat garis dan hasil dari bagian tertentu dari fungsi Anda, a cara kasar melakukan hal ini untuk jumlah baris yang terbatas adalah:

s = {'foo = 1;'
     'foo = foo+1;'
     'disp(''This is a test'');'
     'foo = foo+3;'
     'foo'
    };
for i = 1:numel(s)
   disp(s{i}); eval(s{i});
end

Akan ditampilkan:

foo = 1;
foo = foo+1;
disp('This is a test');
This is a test
foo = foo+3;
foo

foo =

     5    

Saya juga harus menambahkan bahwa saya mungkin tidak akan menggunakan metode seperti ini untuk debugging. Ada cara yang lebih baik untuk mengetahui apa yang terjadi di dalam suatu fungsi.


0
2017-11-04 15:06