Mercurial > hg > octave-nkf
diff scripts/help/which.m @ 18519:2bd78ab75b23
which: Properly identify workspace variables (bug #37320)
* which.m: Check whether each name is a variable, for compatibility with
Matlab and consistency with exist(). Add %!tests for new behavior.
author | Mike Miller <mtmiller@ieee.org> |
---|---|
date | Sat, 08 Feb 2014 14:39:33 -0500 |
parents | d63878346099 |
children | 4197fc428c7d |
line wrap: on
line diff
--- a/scripts/help/which.m +++ b/scripts/help/which.m @@ -28,9 +28,21 @@ if (nargin > 0 && iscellstr (varargin)) m = __which__ (varargin{:}); + ## Check whether each name is a variable, variables take precedence over + ## functions in name resolution. + for i = 1:nargin + m(i).is_variable = evalin ("caller", + ["exist (\"" m(i).name "\", \"var\")"], false); + if (m(i).is_variable) + m(i).file = "variable"; + endif + endfor + if (nargout == 0) for i = 1:nargin - if (isempty (m(i).file)) + if (m(i).is_variable) + printf ("'%s' is a variable\n", m(i).name); + elseif (isempty (m(i).file)) if (! isempty (m(i).type)) printf ("'%s' is a %s\n", m(i).name, m(i).type); @@ -64,3 +76,17 @@ %!assert (which ("_NO_SUCH_NAME_"), "") +%!test +%! x = 3; +%! str = which ("x"); +%! assert (str, "variable"); + +%!test +%! str = which ("amd"); +%! assert (str(end-6:end), "amd.oct"); +%! amd = 12; +%! str = which ("amd"); +%! assert (str, "variable"); +%! clear amd; +%! str = which ("amd"); +%! assert (str(end-6:end), "amd.oct");