diff scripts/general/subsindex.m @ 21072:a9ed4104ecfd

doc: Rewrite documentation for Object Oriented Programming. * octave.texi: Rename "Manipulating Classes" node to "Class Methods" * oop.txi: Rewrite signicant parts of Object Oriented Programming chapter. * examples/code/@FIRfilter/subsasgn.m, examples/code/@FIRfilter/subsref.m, examples/code/@polynomial/get.m, examples/code/@polynomial/subsasgn.m: Enclose property in error messages in double quotes ("%s"). * examples/code/@polynomial/subsref.m: Rename input object to 'p'. Rename variable "ind" to "idx". Enclose property in error messages in double quotes ("%s"). * ov-class.cc (Fsuperiorto, Finferiorto): Improve docstrings. * ov-usr-fcn.cc (Foptimize_subsasgn_calls): Improve docstring. * ov.cc (Fsubsref, Fsubsasgn): Improve docstrings. * display.m: Rewrite docstring. Rename input variable to "obj". Remove unused output variable from function declaration. * subsindex.m: Rename input variable to "obj". Rewrite examples in docstring. Add input validation and BIST tests to m-file.
author Rik <rik@octave.org>
date Thu, 14 Jan 2016 13:30:22 -0800
parents 516bb87ea72e
children b433f9990452
line wrap: on
line diff
--- a/scripts/general/subsindex.m	Thu Jan 14 14:00:32 2016 -0500
+++ b/scripts/general/subsindex.m	Thu Jan 14 13:30:22 2016 -0800
@@ -17,19 +17,19 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn {} {@var{idx} =} subsindex (@var{a})
+## @deftypefn {} {@var{idx} =} subsindex (@var{obj})
 ## Convert an object to an index vector.
 ##
-## When @var{a} is a class object defined with a class constructor, then
+## When @var{obj} is a class object defined with a class constructor, then
 ## @code{subsindex} is the overloading method that allows the conversion of
 ## this class object to a valid indexing vector.  It is important to note that
 ## @code{subsindex} must return a zero-based real integer vector of the class
-## @qcode{"double"}.  For example, if the class constructor
+## @qcode{"double"}.  For example, if the class constructor were
 ##
 ## @example
 ## @group
-## function b = myclass (a)
-##   b = class (struct ("a", a), "myclass");
+## function obj = myclass (a)
+##   obj = class (struct ("a", a), "myclass");
 ## endfunction
 ## @end group
 ## @end example
@@ -39,14 +39,14 @@
 ##
 ## @example
 ## @group
-## function idx = subsindex (a)
-##   idx = double (a.a) - 1.0;
+## function idx = subsindex (obj)
+##   idx = double (obj.a) - 1.0;
 ## endfunction
 ## @end group
 ## @end example
 ##
 ## @noindent
-## can then be used as follows
+## could be used as follows
 ##
 ## @example
 ## @group
@@ -60,7 +60,21 @@
 ## @seealso{class, subsref, subsasgn}
 ## @end deftypefn
 
-function idx = subsindex (a)
-  error ("subsindex: not defined for class \"%s\"", class (a));
+function idx = subsindex (obj)
+  
+  if (nargin != 1)
+    print_usage ();
+  endif
+
+  ## Only way to get here is if subsindex has not been overloaded by a class.
+  error ('subsindex: not defined for class "%s"', class (obj));
+
 endfunction
 
+
+%!error <not defined for class "double"> subsindex (1) 
+
+## Test input validation
+%!error subsindex ()
+%!error subsindex (1, 2)
+