help-octave
[Top][All Lists]
Advanced

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

Re: varargout{:} = func() ?


From: Ben Abbott
Subject: Re: varargout{:} = func() ?
Date: Wed, 24 Feb 2010 08:42:39 -0500

On Feb 24, 2010, at 12:03 AM, Jaroslav Hajek wrote:

> On Wed, Feb 24, 2010 at 3:03 AM, Ben Abbott <address@hidden> wrote:
>> On Feb 23, 2010, at 8:11 PM, John W. Eaton wrote:
>> 
>>> On 23-Feb-2010, Ben Abbott wrote:
>>> 
>>> | On Feb 23, 2010, at 7:43 PM, WS wrote:
>>> |
>>> | > Has this notation been implemented in octave yet?
>>> | >
>>> | > Tx
>>> |
>>> | hmmm ... if you mean something like what is below, then yes.
>>> |
>>> | function varargout = foobar ( )
>>> |   for n = 1:numel(nargout)
>>> |     varargout{n} = n;
>>> |   end
>>> | end
>>> |
>>> | In this instance "varargout" has a special meaning.
>>> |
>>> | If you mean, something like what is below, then that doesn't work with 
>>> 3.2.x, but does with Matlab.
>>> |
>>> |     v{:} = {rand(1,2), rand(1,3)}
>>> |     error: invalid dimension inquiry of a non-existent value
>>> |
>>> | or
>>> |
>>> |     v{:} = rand(1,2)
>>> |     error: invalid dimension inquiry of a non-existent value
>>> |
>>> | Jarsolav, is this something that should be added to Octave?
>>> 
>>> You need to write
>>> 
>>> v = cell (expected_nargout, 1);
>>> 
>>> [v{:}] = func (...);
>>> 
>>> Does
>>> 
>>> v = cell (expected_nargout, 1);
>>> v{:} = func (...);
>>> 
>>> work in Matlab?  If so, I think that's a relatively new addition and
>>> in my opinion doesn't really fit with the rest of the language.
>> 
>>>> v = cell (3, 1)
>> v =
>>    []
>>    []
>>    []
>> 
>>>> v{:} = rand(1,2)
>> v =    [1x2 double]
>> 
>> My impression is that this isn't very new, but as I've always found some of 
>> how Matlab handles cells to be counter intuitive (if not misleading), so I'm 
>> not in the habit of using this notation.
>> 
>> Ben
>> 
>> 
> 
> I'd even say this is a bug in Matlab. The LHS expression is obviously
> a cs-list with 3 elements, and it is outside multiple assignment, so
> it should give an error, like in Octave. This should only work if v is
> 1-by-1 (it does in Octave). What version of Matlab did you try?

I tried R007b and R2009a. After some more experiments, it appears that Matlab 
assumes nargout = 1. Thus for ...

        v{:} = func (...)

The resulting cell is always 1x1.

Ben





reply via email to

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