On 19 April 2012 13:44, Aki Vehtari <aki.veht...@aalto.fi> wrote:
> Hi,
>
> Our research group has made a Matlab toolbox GPstuff (GPL3 license), which
> is using inputParser. We are interested in testing whether we can make it
> work with Octave, too. I found your Octave implementation of inputParser and
> some email list discussion related to that. It's great that someone is
> working on this. If I understood correctly, the current implementation of
> classes in Octave does not allow same syntax as in Matlab? Do you have
> information about whether it is in the near future possible to have the same
> syntax in Octave as in Matlab? We have more than 100 files using
> inputParser, so we are willing to wait a little more instead of having two
> versions of the input parsing code.
>
> Best regards,
>
> Aki Vehtari

Hi Aki

if you're sending me an e-mail about octave, please always CC the
octave-forge or octave core mailing list. Someone there may also be
able to help you better or it gets registered for other people who may
come across the same problem.

The code you're asking for is in the general package release (1.3.0
released less than 1 month ago). Octave core hasn't implemented
classdef yet so we can't have exactly the same API than matlab but the
difference is minimal. Since we can't pass arguments by reference, in
octave you'll need to reassign the output of the function back to the
object, see the examples:

# octave API
obj = obj.method (args)

# matlab api
obj.method (args)

If you read the source of @inputParser/subsref.m there's an hack there
that is commented (lines 27-28). Basically the idea is to use
inputname and then assignin on the caller to change the object. This
would allow the octave API to be compatible (although using an ugly
hack). The reason I'm not using is this bug in core
https://savannah.gnu.org/bugs/?34478 . If you are by any chance able
to fix this bug, then we could have the same API.

If you wish your code to work on both systems, I see the following as
your options:

  1) fix octave-core bug #34478 so octave's inputParser can implement
the same API as matlab
  2) implement classdef in octave (so that an inputParser with same
API can be implemented in octave)
  3) use private functions in your package that check if using matlab
or octave (this should be really really easy. Using varargin, you can
pass the arguments very easily with just a couple of changes).
  4) since your code is also released under GPL you can add octave's
implementation of inputParser to your package so that even if it's
used in matlab, it will be using the octave code

I think option 3 is the one that will take you less work though I'd
obviously prefer you'd implement classdef.

Carnë

------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to