[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: varargout{:} = func() ?
From: |
Jaroslav Hajek |
Subject: |
Re: varargout{:} = func() ? |
Date: |
Wed, 24 Feb 2010 14:58:27 +0100 |
On Wed, Feb 24, 2010 at 2:42 PM, Ben Abbott <address@hidden> wrote:
> 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
>
I think this is a Matlab bug and we should not reproduce it.
Can you try the following in Matlab?
v = cell (3, 1);
v{1:3} = 1;
s = struct ("x", {1, 2});
s.x = 1;
--
RNDr. Jaroslav Hajek, PhD
computing expert & GNU Octave developer
Aeronautical Research and Test Institute (VZLU)
Prague, Czech Republic
url: www.highegg.matfyz.cz
- varargout{:} = func() ?, WS, 2010/02/23
- Re: varargout{:} = func() ?, Ben Abbott, 2010/02/23
- Re: varargout{:} = func() ?, John W. Eaton, 2010/02/23
- Re: varargout{:} = func() ?, Ben Abbott, 2010/02/23
- Re: varargout{:} = func() ?, FW, 2010/02/23
- Re: varargout{:} = func() ?, Ben Abbott, 2010/02/23
- Re: varargout{:} = func() ?, Jaroslav Hajek, 2010/02/24
- Re: varargout{:} = func() ?, Jaroslav Hajek, 2010/02/24
- Re: varargout{:} = func() ?, Jaroslav Hajek, 2010/02/24
- Re: varargout{:} = func() ?, Ben Abbott, 2010/02/24
- Re: varargout{:} = func() ?,
Jaroslav Hajek <=
- Re: varargout{:} = func() ?, Jaroslav Hajek, 2010/02/23
- Re: varargout{:} = func() ?, forkandwait, 2010/02/24
- Re: varargout{:} = func() ?, John W. Eaton, 2010/02/24
- Re: varargout{:} = func() ?, forkandwait, 2010/02/24
- Re: varargout{:} = func() ?, John W. Eaton, 2010/02/24
- Re: varargout{:} = func() ?, forkandwait, 2010/02/24
- Re: varargout{:} = func() ?, Jaroslav Hajek, 2010/02/24