簡體   English   中英

Matlab:調用函數,該函數沒有匿名函數的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM