Mercurial > pytave
changeset 275:24faaa3cf5e5
Merged in macdonald/pytave (pull request #23)
[wip] partial support for multiple outputs
author | Mike Miller <mike@mtmxr.com> |
---|---|
date | Fri, 29 Jul 2016 14:39:27 -0700 |
parents | ecca6a885ffd (current diff) decd3bd7da7e (diff) |
children | e4175c38b012 |
files | @pyobject/subsref.m |
diffstat | 1 files changed, 37 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/@pyobject/subsref.m Fri Jul 29 13:39:23 2016 -0700 +++ b/@pyobject/subsref.m Fri Jul 29 14:39:27 2016 -0700 @@ -85,8 +85,14 @@ ## unpack results, ensure "ans" works (see also pycall) is_none = pyeval ("lambda x: x is None"); - if (nargout > 0 || ! pycall (is_none, r)) + if (nargout == 0 && ! pycall (is_none, r)) + varargout{1} = r; + elseif (nargout == 1) varargout{1} = r; + elseif (nargout >= 2) + assert (length (r) == nargout, ... + "pyobject/subsref: number of outputs must match") + [varargout{1:nargout}] = r{1:nargout}; endif endfunction @@ -200,3 +206,33 @@ %! s.pop (); %! assert (exist ("ans", "var")) %! assert (length (s) == 1) + +%!test +%! % multiple return values: can get all of them +%! f = pyeval ("lambda: (1, 2, 3)"); +%! a = f (); +%! assert (length (a) == 3) + +%!test +%! % multiple return values: separate them +%! f = pyeval ("lambda: (1, 2, 3)"); +%! [a, b, c] = f (); +%! assert (a, 1) +%! assert (b, 2) +%! assert (c, 3) + +%!test +%! % multiple return values: set ans +%! f = pyeval ("lambda: (1, 2, 3)"); +%! f (); +%! assert (length (ans) == 3) + +%!error <outputs must match> +%! % multiple return values: too many outputs +%! f = pyeval ("lambda: (1, 2)"); +%! [a, b, c] = f (); + +%!error <outputs must match> +%! % multiple return values: not enough outputs +%! f = pyeval ("lambda: (1, 2, 3)"); +%! [a, b] = f ();