octave-maintainers
[Top][All Lists]
Advanced

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

structfun: more than one output argument


From: Thorsten Meyer
Subject: structfun: more than one output argument
Date: Sun, 17 Jan 2010 19:35:17 +0100
User-agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706)

Hi,

here is a patch to extend the capability of cellfun of handling more than one
output argument to structfun. This will make structfun more matlab compatible.

Ok to push?

regards

Thorsten


# HG changeset patch
# User Thorsten Meyer <address@hidden>
# Date 1263752953 -3600
# Node ID 1cb972a342af1bf2c4fe9b8bcfb3445b9da72b2b
# Parent  9d1a14e12431eb18830bc00c44d7a9635d14f966
[mq]: structfun_more_output_args

diff -r 9d1a14e12431 -r 1cb972a342af scripts/ChangeLog
--- a/scripts/ChangeLog Sun Jan 17 13:31:42 2010 +0100
+++ b/scripts/ChangeLog Sun Jan 17 19:29:13 2010 +0100
@@ -0,0 +1,5 @@
+2010-01-17  Thorsten Meyer  <address@hidden>
+
+       * general/structfun.m: Add support for more than one output
+       argment.
+
diff -r 9d1a14e12431 -r 1cb972a342af scripts/general/structfun.m
--- a/scripts/general/structfun.m       Sun Jan 17 13:31:42 2010 +0100
+++ b/scripts/general/structfun.m       Sun Jan 17 19:29:13 2010 +0100
@@ -78,7 +78,9 @@
   [varargout{:}] = cellfun (fun, struct2cell (s), varargin{:});
 
   if (iscell (varargout{1}))
-    [varargout{:}] = cell2struct (varargout{1}, fieldnames(s), 1);
+    for n = 1:length(varargout)
+      varargout{n} = cell2struct (varargout{1}, fieldnames(s), 1);
+    endfor
   endif
 endfunction
 
@@ -91,3 +93,18 @@
 %! o = structfun (@(x) regexp (x, '(\w+)$', "matches"){1}, s, 
 %!               "UniformOutput", false);
 %! assert (o, l);
+
+%!function [a, b] = twoouts (x)
+%!  a = x + x;
+%!  b = x * x;
+%!test
+%! s = struct ("a", {1, 2, 3}, "b", {4, 5, 6});
+%! c(1:2, 1, 1) = [2; 8];
+%! c(1:2, 1, 2) = [4; 10];
+%! c(1:2, 1, 3) = [6; 12];
+%! d(1:2, 1, 1) = [1; 16];
+%! d(1:2, 1, 2) = [4; 25];
+%! d(1:2, 1, 3) = [9; 36];
+%! [aa, bb] = structfun(@twoouts, s);
+%! assert(aa, c);
+%! assert(bb, d);

reply via email to

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