Editing Performance
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 5: | Line 5: | ||
It is possible to set [http://www.gnu.org/software/octave/doc/interpreter/Default-Arguments.html default values] when declaring the function arguments. This defaults can be the result of a computation, maybe even using the other arguments: | It is possible to set [http://www.gnu.org/software/octave/doc/interpreter/Default-Arguments.html default values] when declaring the function arguments. This defaults can be the result of a computation, maybe even using the other arguments: | ||
{{Code|Defining argument defaults|<syntaxhighlight lang=" | {{Code|Defining argument defaults|<syntaxhighlight lang="matlab" style="font-size:13px"> | ||
function foo (arg1, arg2 = heavyfoo (arg1)) | function foo (arg1, arg2 = heavyfoo (arg1)) | ||
## code | ## code | ||
Line 13: | Line 13: | ||
One could think of setting defaults inside a condition checking the value of {{Codeline|nargin}} to avoid computing heavyfoo. However the interpreter will not generate the default value if the value is already given so it ends up being the same thing. That is, don't try to be smart, the interpreter already is, and write defaults on the list of arguments for code that is shorter and easier to read. | One could think of setting defaults inside a condition checking the value of {{Codeline|nargin}} to avoid computing heavyfoo. However the interpreter will not generate the default value if the value is already given so it ends up being the same thing. That is, don't try to be smart, the interpreter already is, and write defaults on the list of arguments for code that is shorter and easier to read. | ||
{{Code|Proof that interpreter does not compute defaults unless needed|<syntaxhighlight lang=" | {{Code|Proof that interpreter does not compute defaults unless needed|<syntaxhighlight lang="matlab" style="font-size:13px"> | ||
function defaults_at_list (arg = rand (10000)) | function defaults_at_list (arg = rand (10000)) | ||
## just a simple operation | ## just a simple operation | ||
Line 35: | Line 35: | ||
When passing variables to a function, Octave will only make a copy of it is going to be modified. That is, unless the argument needs to be changed, the variable will be like a reference and take no extra memory or time to write. | When passing variables to a function, Octave will only make a copy of it is going to be modified. That is, unless the argument needs to be changed, the variable will be like a reference and take no extra memory or time to write. | ||
{{Code|Looking at lazy copying|<syntaxhighlight lang=" | {{Code|Looking at lazy copying|<syntaxhighlight lang="matlab" style="font-size:13px"> | ||
function read_arg (arg) | function read_arg (arg) | ||
x = arg(1); | x = arg(1); |