具体回答:
参考您的示例用例,老实说,这让我觉得这是一种微观优化。这些加一操作当然不是代码中阻碍其快速运行的瓶颈,因此您应该专注于加速代码中进行大量计算的部分。
如果您只想出于美观(第一次尝试时就拼写出来!)原因进行此更改,或者因为您只是不喜欢跟踪额外的更改,那么创建一个函数来处理它,如您的示例所示我认为这是一个错误的选择,因为它只会使代码更难以阅读和理解。我建议简单地创建一个新变量,如下所示:
windowOffset = windowWidth - 1;
lastWindowStartIdx = length(list) - windowOffset;
for windowStartIdx = 1:lastWindowStartIdx
display(list[windowStartIdx:windowStartIdx + windowOffset]);
end
一般回答:
关于您关于如何创建真实的更普遍的问题内联函数 http://en.wikipedia.org/wiki/Inline_function在 MATLAB 中就像在 C 或 C++ 中一样,我不相信有任何方法可以做到这一点。我想也许匿名函数 http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html可能符合要求,但是在与MATLAB 中不同类型函数的数量 http://www.mathworks.com/help/techdoc/matlab_prog/f4-62416.html我发现匿名函数实际上比好的 ol' 慢子功能 http://www.mathworks.com/help/techdoc/matlab_prog/f4-70666.html进行简单的+1操作。
以下是我测试的示例函数:
function parent_function
add_one_anon = @(A) A+1; %# An anonymous function
add_one_inline = inline('A+1'); %# An "inline" function
function add_one_nest %# A nested function
A = A+1;
end
%# Did the timing here ...
end
function A = add_one_sub(A) %# A subfunction
A = A+1;
end
我运行了这 100,000 次,递增了从 1 开始的标量值,结果如下:
| Time (sec)
------------+------------
subfunction | 0.0507
anonymous | 0.0672
nested | 0.0932
inline | 14.7095
如果匿名函数的行为就像真正的内联函数,我希望它们是最快的解决方案。