[英]Matlab: Call function that has no outputs from an anonymous function
我想從匿名函數中調用某個函數,例如
@(){fooBar(baz)}
麻煩的是, fooBar
沒有輸出,這使匿名函數抱怨。 除了使fooBar
函數返回虛擬輸出之外,還有其他方法嗎?
問題出在您的匿名函數定義中。 通過將函數foobar(baz)
在字符{...}
,您正在編寫必須具有以下功能的函數:
foobar(baz)
cell
顯然,在步驟(2)中,Matlab無法將表達式(1)的結果放入單元格中,因為(1)沒有輸出。
因此,只需定義沒有花括號的函數即可:
myFunction = @() fooBar(baz)
一切應該正常。
為了舉例說明,讓我們通過做一些不產生輸出的事情來定義函數fooBar
(例如,更改ax限制):
fooBar = @(axlim) set(gca,'XLim',axlim)
我現在可以調用fooBar([0 20])
,並且當前軸將直接將其軸限制設置為[0 20]
如果有一個我經常使用的軸跨度(例如[-5 5]),我很想定義一個新函數,該函數將始終使用相同(經常使用)的參數調用fooBar
:
fooBarPrefered = @() fooBar([-5 5])
現在,每次我調用fooBarPrefered()
,我的軸X限制都直接設置為[-5 5]。
為了進一步說明這一點,由於調用fooBar([-5 5])
不會產生輸出,因此如果我用花括號定義函數,Matlab的確會抱怨:
fooBarPrefered = @() {fooBar([-5 5])} ;
>> fooBarPrefered()
One or more output arguments not assigned during call to "set".
Error in @(axlim)set(gca,'XLim',axlim)
Error in @(){fooBar([-5,5])}
但是請注意,與嘗試將fooBar
的輸出直接分配給工作空間中的變量時,這是相同的錯誤:
a = fooBar([0 20])
One or more output arguments not assigned during call to "set".
Error in @(axlim)set(gca,'XLim',axlim)
底線:如果函數沒有輸出,請勿嘗試將此輸出重定向到變量或表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.