ฉันมีฟังก์ชันที่คืนค่าสองค่า เช่น:
[a b] = myfunc(x)
มีวิธีรับค่าที่ส่งคืนที่สองโดยไม่ต้องใช้ตัวแปรชั่วคราว และไม่เปลี่ยนแปลงฟังก์ชันหรือไม่?
สิ่งที่ฉันกำลังมองหาคือสิ่งนี้:
abs(secondreturnvalue(myfunc(x)))
ฉันมีฟังก์ชันที่คืนค่าสองค่า เช่น:
[a b] = myfunc(x)
มีวิธีรับค่าที่ส่งคืนที่สองโดยไม่ต้องใช้ตัวแปรชั่วคราว และไม่เปลี่ยนแปลงฟังก์ชันหรือไม่?
สิ่งที่ฉันกำลังมองหาคือสิ่งนี้:
abs(secondreturnvalue(myfunc(x)))
เว้นแต่จะมีความจำเป็นเร่งด่วนในการดำเนินการนี้ ฉันคงจะแนะนำไม่ให้ทำเช่นนั้น ความชัดเจนของรหัสของคุณจะลดลง การจัดเก็บเอาต์พุตในตัวแปรชั่วคราวแล้วส่งตัวแปรเหล่านี้ไปยังฟังก์ชันอื่นจะทำให้โค้ดของคุณสะอาดขึ้น และวิธีการต่างๆ ที่คุณสามารถทำได้มีสรุปอยู่ที่นี่: จะละเว้นค่าที่ส่งคืนของฟังก์ชัน MATLAB อย่างหรูหราได้อย่างไร
อย่างไรก็ตาม หากคุณ จริงๆ ต้องการหรือจำเป็นต้องทำเช่นนี้ วิธีเดียวที่เป็นไปได้ที่ฉันคิดได้คือสร้างฟังก์ชันของคุณเอง secondreturnvalue
ต่อไปนี้เป็นตัวอย่างทั่วไปที่เรียกว่า nth_output
:
function value = nth_output(N,fcn,varargin)
[value{1:N}] = fcn(varargin{:});
value = value{N};
end
และคุณจะเรียกมันโดยการส่งผ่านเป็นอินพุต 1) หมายเลขอาร์กิวเมนต์เอาต์พุตที่คุณต้องการ 2) ตัวจัดการฟังก์ชัน ถึง myfunc
และ 3) อาร์กิวเมนต์อินพุตใดก็ตามที่คุณต้องการส่งไปยัง myfunc
:
abs(nth_output(2,@myfunc,x))
ไม่ใช่ว่าฉันรู้ ดูเหมือนว่า subsref
จะไม่ทำงานในกรณีนี้ อาจเป็นเพราะตัวแปรตัวที่สองไม่ได้รับการส่งคืนจากฟังก์ชันด้วยซ้ำ
เนื่องจาก Matlab 2009b จึงสามารถใช้สัญลักษณ์ได้
[~, b] = function(x)
หากคุณไม่ต้องการอาร์กิวเมนต์แรก แต่ยังคงใช้ตัวแปรชั่วคราวสำหรับ b