5
A
回答
10
執行使用yield
關鍵字的函數時,它們實際上會返回一個生成器。生成器是一種迭代器。雖然MATLAB不提供任何語法,但您可以自己實現"iterator interface"。下面是類似蟒蛇xrange
函數的一個例子:
classdef rangeIterator < handle
properties (Access = private)
i
n
end
methods
function obj = rangeIterator(n)
obj.i = 0;
obj.n = n;
end
function val = next(obj)
if obj.i < obj.n
val = obj.i;
obj.i = obj.i + 1;
else
error('Iterator:StopIteration', 'Stop iteration')
end
end
function reset(obj)
obj.i = 0;
end
end
end
下面是我們如何使用迭代器:
r = rangeIterator(10);
try
% keep call next() method until it throws StopIteration
while true
x = r.next();
disp(x);
end
catch ME
% if it is not the "stop iteration" exception, rethrow it as an error
if ~strcmp(ME.identifier,'Iterator:StopIteration')
rethrow(ME);
end
end
注意的迭代器中使用Python構建for .. in ..
時,它在內部做了類似的事情。
可以使用常規函數而不是類來編寫類似的東西,方法是使用persistent
變量或閉包來存儲函數的本地狀態,並在每次調用時返回「中間結果」。 (?尚未在八度)
2
在MATLAB中,你可以使用閉包(嵌套,範圍的功能):
function iterator = MyTimeStampedValues(values)
index = 1;
function [value, timestamp, done] = next()
if index <= length(values)
value = values(index);
timestamp = datestr(now);
done = (index == length(values));
index = index + 1;
else
error('Values exhausted');
end
end
iterator = @next;
end
然後
iterator = MyTimeStampedValues([1 2 3 4 5]);
[v, ts, done] = iterator(); % [1, '13-Jan-2014 23:30:45', false]
[v, ts, done] = iterator(); % ...
相關問題
- 1. 在Python中,這對關鍵字「continue」和「yield」是做什麼的?
- 2. 什麼是[Android] Java的等效VB.NET的靜態關鍵字?
- 3. 什麼是C#的默認()的等效Java關鍵字/結構?
- 4. C Sharp中「friend」關鍵字的等效含義是什麼?
- 5. VB.NET中的「yield return」等效語法是什麼?
- 6. Matlab的等效Python Python scipy.optimize.fmin_cg
- 7. 在Vb.Net等效於var關鍵字
- 8. TSQL等效於PostgreSQL「PERFORM」關鍵字?
- 9. 與org.eclipse.jdt.core.IJavaElement等效的Python/PyDev是什麼?
- 10. 什麼是setTimeOut()的JavaScript等效於Android?
- 11. 什麼是等效於fileAFormOpt的IForm?
- 12. Codecademy Ruby yield關鍵字
- 13. 什麼是'char'關鍵字用於?
- 14. C#默認關鍵字的F#中的等效內容是什麼?
- 15. 在Matlab中,等於+ =是什麼?
- 16. 什麼是等效於Matlab單元陣列?
- 17. OpenCV等效於Matlab的rdivide?
- 18. Matlab。等效於R
- 19. 什麼是java的transient關鍵字的C#等價物?
- 20. 'yield'關鍵字是一個語法糖嗎?什麼是它執行
- 21. 什麼的「放」關鍵字就在Python
- 22. 爲什麼這個python autobahn代碼需要使用'yield'關鍵字?
- 23. 什麼是等效的lambda?
- 24. Yield關鍵字的確切用法
- 25. 什麼是typeof關鍵字
- 26. 什麼是RCS關鍵字?
- 27. 'break'的等效VB關鍵字
- 28. vb.net中「this」關鍵字的等效
- 29. 什麼是字符串中%s的Python 3等效物?
- 30. 什麼是VB Linq中Aggregate關鍵字的C#等價物?
我不認爲Matlab具有懶惰的評價。 – senshin
看看varargout,這可能會解決你的問題。 – Daniel
如果內存不足,varargout將無法解決問題。 –