Bagaimana cara mendapatkan nilai pengembalian kedua dari suatu fungsi tanpa menggunakan variabel sementara?

Saya memiliki fungsi yang mengembalikan dua nilai, seperti:

[a b] = myfunc(x)

Apakah ada cara untuk mendapatkan nilai pengembalian kedua tanpa menggunakan variabel sementara, dan tanpa mengubah fungsinya?

Yang saya cari adalah sesuatu seperti ini:

abs(secondreturnvalue(myfunc(x)))

person jjkparker    schedule 14.09.2010    source sumber
comment
Bagaimana dengan menggunakan kelas alih-alih fungsi dengan metode 'pengambil' yang sesuai. Anda mungkin mendapatkan sesuatu seperti abs(myfunc.secondReturnValue(x)).   -  person zellus    schedule 15.09.2010
comment
Memberi suara positif pada ini sebagai permintaan fitur semu ke MathWorks.   -  person David Kelley    schedule 07.03.2017


Jawaban (2)


Kecuali ada kebutuhan mendesak untuk melakukan hal ini, saya mungkin akan menyarankan untuk tidak melakukannya. Kejelasan kode Anda akan terganggu. Menyimpan output dalam variabel sementara dan kemudian meneruskan variabel ini ke fungsi lain akan membuat kode Anda lebih bersih, dan berbagai cara untuk melakukan hal ini dijelaskan di sini: Bagaimana cara mengabaikan beberapa nilai kembalian fungsi MATLAB dengan elegan?.

Namun, jika Anda benar-benar ingin atau perlu melakukan ini, satu-satunya cara yang dapat saya pikirkan adalah dengan membuat fungsi Anda sendiri secondreturnvalue. Berikut contoh yang lebih umum yang disebut nth_output:

function value = nth_output(N,fcn,varargin)
  [value{1:N}] = fcn(varargin{:});
  value = value{N};
end

Dan Anda akan memanggilnya dengan meneruskan sebagai input 1) nomor argumen keluaran yang Anda inginkan, 2) a fungsi menangani ke myfunc, dan 3) argumen masukan apa pun yang perlu Anda sampaikan ke myfunc:

abs(nth_output(2,@myfunc,x))
person gnovice    schedule 14.09.2010

tidak yang saya tahu. subsref sepertinya tidak berfungsi dalam kasus ini, mungkin karena variabel kedua bahkan tidak dikembalikan dari fungsinya.

sejak matlab 2009b dimungkinkan untuk menggunakan notasi

[~, b] = function(x) 

jika Anda tidak memerlukan argumen pertama, tetapi ini masih menggunakan variabel sementara untuk b.

person second    schedule 14.09.2010