第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在MATLAB匿名函數(shù)中執(zhí)行多個(gè)語(yǔ)句?

如何在MATLAB匿名函數(shù)中執(zhí)行多個(gè)語(yǔ)句?

我想做這樣的事情:>> foo = @() functionCall1() functionCall2()所以當(dāng)我說(shuō):>> foo()它先執(zhí)行functionCall1()然后執(zhí)行functionCall2()。(我覺(jué)得我需要類(lèi)似C的運(yùn)算符)編輯:functionCall1并且functionCall2不一定是返回值的函數(shù)。
查看完整描述

3 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

嘗試通過(guò)命令行執(zhí)行所有操作而不在m文件中保存函數(shù)可能是一項(xiàng)復(fù)雜而混亂的工作,但這是我想出的一種方法...


首先,創(chuàng)建您的匿名函數(shù)并將其句柄放入單元格數(shù)組中:


fcn1 = @() ...;

fcn2 = @() ...;

fcn3 = @() ...;

fcnArray = {fcn1 fcn2 fcn3};

...或者,如果您已經(jīng)定義了函數(shù)(例如在m文件中),則將函數(shù)句柄放置在像這樣的單元格數(shù)組中:


fcnArray = {@fcn1 @fcn2 @fcn3};

然后,您可以創(chuàng)建一個(gè)新的匿名函數(shù),該函數(shù)使用內(nèi)置函數(shù)cellfun和調(diào)用數(shù)組中的每個(gè)函數(shù)feval:


foo = @() cellfun(@feval,fcnArray);

盡管看起來(lái)很有趣,但它確實(shí)有效。


編輯:如果fcnArray需要使用輸入?yún)?shù)來(lái)調(diào)用函數(shù),則首先必須確保數(shù)組中的所有函數(shù)都需要輸入數(shù)量相同。在這種情況下,下面的示例演示如何使用每個(gè)輸入?yún)?shù)調(diào)用函數(shù)數(shù)組:


foo = @(x) cellfun(@feval,fcnArray,x);

inArgs = {1 'a' [1 2 3]};

foo(inArgs);  %# Passes 1 to fcn1, 'a' to fcn2, and [1 2 3] to fcn3


警告詞:有關(guān)cellfun狀態(tài)文檔,說(shuō)明未指定并且不應(yīng)依賴輸出元素的計(jì)算順序。這意味著沒(méi)有保證fcn1可以在fcn2或之前得到評(píng)估fcn3。如果訂單很重要,則不應(yīng)使用上述解決方案。


查看完整回答
反對(duì) 回復(fù) 2019-12-02
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

Matlab中的匿名函數(shù)語(yǔ)法(像某些其他語(yǔ)言一樣)僅允許單個(gè)表達(dá)式。此外,它具有不同的變量綁定語(yǔ)義(不在參數(shù)列表中的變量在函數(shù)創(chuàng)建時(shí)具有按詞法綁定的值,而不是綁定引用)。這種簡(jiǎn)單性使Mathworks可以在后臺(tái)進(jìn)行一些優(yōu)化,并避免在腳本中使用它們時(shí)出現(xiàn)許多混亂的作用域和對(duì)象生存期問(wèn)題。


如果要在函數(shù)(而不是腳本)中定義此匿名函數(shù),則可以創(chuàng)建命名的內(nèi)部函數(shù)。內(nèi)部函數(shù)具有正常的詞法引用綁定,并允許任意數(shù)量的語(yǔ)句。


function F = createfcn(a,...)

  F = @myfunc;

  function b = myfunc(...)

    a = a+1; 

    b = a; 

  end

end

有時(shí),您可以擺脫gnovice的建議之類(lèi)的技巧。


在使用eval時(shí)要特別小心……它效率極低(它繞過(guò)JIT),Matlab的優(yōu)化程序可能會(huì)混淆eval表達(dá)式內(nèi)部使用的外部作用域中的變量和函數(shù)。調(diào)試和/或擴(kuò)展使用eval的代碼也很困難。


查看完整回答
反對(duì) 回復(fù) 2019-12-02
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

這是一種保證執(zhí)行順序的方法,并且(在最后提到了修改)允許將不同的參數(shù)傳遞給不同的函數(shù)。


call1 = @(a,b) a();

call12 = @(a,b) call1(b,call1(a,b));

關(guān)鍵是call1調(diào)用第一個(gè)參數(shù)而忽略第二個(gè)參數(shù)。call12調(diào)用其第一個(gè)參數(shù),然后調(diào)用第二個(gè)參數(shù),并從第二個(gè)參數(shù)返回值。之所以起作用,是因?yàn)闊o(wú)法在函數(shù)的參數(shù)之前對(duì)其求值。要?jiǎng)?chuàng)建您的示例,您應(yīng)編寫(xiě):


foo = @() call12(functionCall1, functionCall2);

測(cè)試代碼


這是我使用的測(cè)試代碼:


>> print1=@()fprintf('1\n');

>> print2=@()fprintf('2\n');

>> call12(print1,print2)

1

2

調(diào)用更多功能


要調(diào)用3個(gè)函數(shù),您可以編寫(xiě)


call1(print3, call1(print2, call1(print1,print2)));

4個(gè)功能:


call1(print4, call1(print3, call1(print2, call1(print1,print2))));

有關(guān)更多功能,請(qǐng)繼續(xù)嵌套模式。


傳遞參數(shù)


如果您需要傳遞參數(shù),則可以編寫(xiě)一個(gè)帶有參數(shù)的版本,call1然后對(duì)進(jìn)行明顯的修改call12。


call1arg1 = @(a,arg_a,b) a(arg_a);

call12arg1 = @(a, arg_a, b, arg_b) call1arg1(b, arg_b, call1arg1(a, arg_a, b))

您還可以制作帶有多個(gè)參數(shù)的call1版本,并根據(jù)需要對(duì)其進(jìn)行混合和匹配。


查看完整回答
反對(duì) 回復(fù) 2019-12-02
  • 3 回答
  • 0 關(guān)注
  • 1293 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)