ฉันจะรับค่าส่งคืนที่สองจากฟังก์ชันโดยไม่ต้องใช้ตัวแปรชั่วคราวได้อย่างไร

ฉันมีฟังก์ชันที่คืนค่าสองค่า เช่น:

[a b] = myfunc(x)

มีวิธีรับค่าที่ส่งคืนที่สองโดยไม่ต้องใช้ตัวแปรชั่วคราว และไม่เปลี่ยนแปลงฟังก์ชันหรือไม่?

สิ่งที่ฉันกำลังมองหาคือสิ่งนี้:

abs(secondreturnvalue(myfunc(x)))

person jjkparker    schedule 14.09.2010    source แหล่งที่มา
comment
แล้วการใช้คลาสแทนฟังก์ชันที่มีเมธอด 'getter' ที่สอดคล้องกันล่ะ คุณอาจได้รับบางอย่างเช่น abs(myfunc.secondReturnValue(x))   -  person zellus    schedule 15.09.2010
comment
การลงคะแนนนี้เป็นคำขอคุณลักษณะหลอกของ MathWorks   -  person David Kelley    schedule 07.03.2017


คำตอบ (2)


เว้นแต่จะมีความจำเป็นเร่งด่วนในการดำเนินการนี้ ฉันคงจะแนะนำไม่ให้ทำเช่นนั้น ความชัดเจนของรหัสของคุณจะลดลง การจัดเก็บเอาต์พุตในตัวแปรชั่วคราวแล้วส่งตัวแปรเหล่านี้ไปยังฟังก์ชันอื่นจะทำให้โค้ดของคุณสะอาดขึ้น และวิธีการต่างๆ ที่คุณสามารถทำได้มีสรุปอยู่ที่นี่: จะละเว้นค่าที่ส่งคืนของฟังก์ชัน 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))
person gnovice    schedule 14.09.2010

ไม่ใช่ว่าฉันรู้ ดูเหมือนว่า subsref จะไม่ทำงานในกรณีนี้ อาจเป็นเพราะตัวแปรตัวที่สองไม่ได้รับการส่งคืนจากฟังก์ชันด้วยซ้ำ

เนื่องจาก Matlab 2009b จึงสามารถใช้สัญลักษณ์ได้

[~, b] = function(x) 

หากคุณไม่ต้องการอาร์กิวเมนต์แรก แต่ยังคงใช้ตัวแปรชั่วคราวสำหรับ b

person second    schedule 14.09.2010