octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #55523] default argument of anonymous function


From: anonymous
Subject: [Octave-bug-tracker] [bug #55523] default argument of anonymous function is not bound to value of local variable
Date: Fri, 15 May 2020 23:51:33 -0400 (EDT)
User-agent: Mozilla/5.0 (Windows NT 5.1; rv:60.9) Goanna/4.1 PaleMoon/28.2.0a1

Follow-up Comment #9, bug #55523 (project octave):

The bug submitter is here.

I think I was wrong in reporting this behavior as bug and I apologize in
advance!

The function definition:


function foo (a = b)
  disp (a)
end


When called as foo () is translated to:


function foo ()
  a = b;
  disp (a)
end


It means that the default value expression is evaluated in the context of the
function that I think it is compatible with the MATLAB's new argument
validation syntax:
https://www.mathworks.com/help/matlab/matlab_prog/function-argument-validation-1.html


In the argument validation syntax we can define a default value and it is
evaluated in the context of the function and it can be any "constant" or
"expression".

In the case of nested function:


function bar ()
  a = 1;
  k = 7;

  function foo (a = a)
  end

  foo ()
end


It is evaluated as:


function bar ()
 a = 1;
 k = 7;

 function foo ()
  - "a" and "k" are/can be captured from the nesting scope
  - define local variable "a" (it gets undefined value) 
     and it hides the "a" that is in the nesting scope
  - "a = a" now should be no-op operation but because we
     assigning undefined value to a variable an error
     message is shown.
 end

 foo ()
end


However for some unknown reasons the MATLAB's argument validation syntax is
disallowed in nested functions (should the default value in nested functions
be prohibited?).

So I think this bug can be closed as it seems that the current  behavior of
Octave is OK.


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?55523>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]