From: "chris.danx" <chris.danx@ntlworld.com>
To: "O'Caml Mailing List" <caml-list@inria.fr>
Subject: Type problem... possible design problem
Date: Sat, 18 Dec 2004 00:42:31 +0000 [thread overview]
Message-ID: <41C37CF7.5050400@ntlworld.com> (raw)
Hi,
What is the solution to the following problem? There are two types of
object in a scene graph, those that may have children and those may not.
A leaf may not have children.
For various reasons, I need to preserve the methods of internal nodes
(non leaves). I thought about something like this
type childNode = LeafNode of sgLeaf | IntNode of sgInternal
and
class sgLeaf
= object(self)
method draw () = ()
end
and
class sgInternal
= object(self)
method addChild (child : childNode) = ()
method getChildren () = ...
method draw () = ()
end
but this isn't legal O'Caml. The following also doesn't work.
type childNode =
LeafNode of <draw:unit -> unit; ..>
| IntNode of <draw:unit -> unit; addChild: childNode -> unit; ..>
I've not programmed in O'Caml for a while and am not yet fully
comfortable with ocamls object system anyway, so I may be being silly.
Can anyone shed some light on a solution to this?
Basically I need to be able to call addChild, etc for internal nodes if
they're not leaves so I need to remember whether the type contains only
draw or it also contains addChild, etc. It will be clients that call
operations like addChild, getChildren, ...
Perhaps this is the wrong solution entirely.
Thanks,
Chris
next reply other threads:[~2004-12-18 0:42 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-18 0:42 chris.danx [this message]
2004-12-18 4:00 ` [Caml-list] " Matt Gushee
2004-12-18 8:07 ` Jon Harrop
2004-12-18 14:28 ` chris.danx
2004-12-18 15:27 ` Richard Jones
2004-12-18 20:06 ` chris.danx
2004-12-18 18:37 ` Jon Harrop
2004-12-20 11:50 ` skaller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41C37CF7.5050400@ntlworld.com \
--to=chris.danx@ntlworld.com \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox