help-octave
[Top][All Lists]
Advanced

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

Re: object behavior with Octave...


From: Ben Abbott
Subject: Re: object behavior with Octave...
Date: Sat, 14 Feb 2009 12:23:18 -0500

James,

I'm not as familiar with Octave's objects as are others. You'll likely get much better more (and I expect better) information if your reply- all so that thread stays on the list.

I haven't tried this, but I'd create a m-file function called create_ball.m and place all the contents below in it.

function ball = create_ball ()
  ball.bounce = @bounce;
  ball.add_volume = @add_volume;
  ball.set_color = @set_color;
endfunction
function ret = bounce (varargins)
... bounce code here ...
endfunction
function ret = add_volumne (varargins)
... add the volume here ...
endfunction
function ret = set_color (varargins)
... set the color here ...
endfunction

The problem I see is that you'll need to access these function as ball.bounce(ball)

Perhaps there is a way to associate a handle with a specific instance of a structure, but I don't know how.

Do I understand your intention?

Ben

On Feb 14, 2009, at 11:58 AM, James Moliere wrote:

Ben,
Thanks! For the tip below. I need to keep everything in functions (or
structures).

I'd really like 1 .m file to hold multiple functions that a user can
call. Since Octave does not have the concept of a namespace or package,
it is possible to create LOTS of .m files but over time, it will be
difficult manage.

To give a more concrete example, I'd like to use a structure as an
object such as Ball.  I could create functions like bounce(),
addVolume(air), setColor(color), etc. I would also like a .m file named createBall.m that returns the structure and it's respective methods for
a ball.

I'm looking at the docs in the 'GNU Octave Manual 3.3' and am not
finding anything satisfactory.


James

On Sat, 2009-02-14 at 08:34 -0800, Ben Abbott wrote:
        
On Feb 14, 2009, at 9:54 AM, James Moliere wrote:


looking at the URL
http://asis.epfl.ch/SCI.MATH/octave-2.0.16/Octave-FAQ_3.html

I don't see the capability below. Can I assign functions to variables
in a structure and call them?


# simple increment example
function [ ret ] = tt (a)
      x.a=a
      function result = anon(x)
              x.a = x.a+1
              result = x
      endfunction
      x.increment = @anon
      ret = x
endfunction

... I'd like to do something like this

k = tt(1)
k.increment(k) % or k.increment() without passing in k
... I'd expect an answer of 2.


Your example can be entered at the command line as ...

function result = anon(x)
       x.a = x.a+1;
       result = x;
endfunction
function [ ret ] = tt (a)
       x.a=a;
       x.increment = @anon;
       ret = x;
endfunction

x.a = 0;

anon(x)
ans =
{
  a =  1
}

x = tt(1)
x =
{
  a =  1
  increment =

anon
}

x.increment(x)
ans =
{
  a =  2
  increment =

anon
}

If you try x.increment() it will produce an error, because that is the
same as calling anon().

Ben




reply via email to

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