* [Caml-list] Is there a compact syntax for masking methods in an inherit
@ 2003-09-06 22:26 Ryan R Newton
2003-09-07 8:03 ` Jacques Garrigue
0 siblings, 1 reply; 3+ messages in thread
From: Ryan R Newton @ 2003-09-06 22:26 UTC (permalink / raw)
To: caml-list
Hello Camlers,
I've developed a liking for using multiple inheritacnce heavily as
follows:
When I'm working on a library (say, an evolutionary computation library,
or a distributed computing library), I'm real crazy about making
composable "plug-and-play" units of functionality rather than a
monolithic class hierarchy. That is, I like to make a base class along
with small virtual "layer" classes. I combine different features by
defining a new class which inherits from the base class and a subset of
the layer classes.
Is there a name for this sort of pattern? Is it a horrible idea for
some reason?
Anyway, the point of this post is: When inheriting the same method from
two sources, I quite reasonably get this message:
"Warning: the following methods are overriden by the inherited class:"
What's the best way to get rid of it? (Without turning off all
warnings.)
Here's an example:
class a =
object (self)
method f = 3
method g = self#f * 3
end
class virtual b =
object (self)
method g = self#f * 4
end
class c =
object
inherit a
inherit b
method h = 99
end
Warning: the following methods are overriden by the inherited class:
g
Ideally, I'd like to make the overlap explicit and get rid of the
warning at the same time by typing something like:
inherit a without g
Any ideas?
--Ryan Newton
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Caml-list] Is there a compact syntax for masking methods in an inherit
2003-09-06 22:26 [Caml-list] Is there a compact syntax for masking methods in an inherit Ryan R Newton
@ 2003-09-07 8:03 ` Jacques Garrigue
[not found] ` <1063148703.27949.43.camel@moremischief>
0 siblings, 1 reply; 3+ messages in thread
From: Jacques Garrigue @ 2003-09-07 8:03 UTC (permalink / raw)
To: newton; +Cc: caml-list
From: Ryan R Newton <newton@MIT.EDU>
> I've developed a liking for using multiple inheritacnce heavily as
> follows:
>
> When I'm working on a library (say, an evolutionary computation library,
> or a distributed computing library), I'm real crazy about making
> composable "plug-and-play" units of functionality rather than a
> monolithic class hierarchy. That is, I like to make a base class along
> with small virtual "layer" classes. I combine different features by
> defining a new class which inherits from the base class and a subset of
> the layer classes.
>
> Is there a name for this sort of pattern? Is it a horrible idea for
> some reason?
It looks like what most people call a mixin.
Or is it different?
> Anyway, the point of this post is: When inheriting the same method from
> two sources, I quite reasonably get this message:
>
> "Warning: the following methods are overriden by the inherited class:"
>
> What's the best way to get rid of it? (Without turning off all
> warnings.)
If you just mean, turn off only this warning, this is easy
ocamlc -w m
Clearly what you are doing is legal and reasonable, but I see no way
to avoid the warning for public methods without disabling it.
For private methods, you can hide them when inheriting, but then you
are changing the semantics (the methods will not be merged)
class c = object
inherit (a : object method f : int end)
inherit b
...
end
is legal if g is private in a.
The impossibility to hide public methods is fundamental to the ocaml
type system. So "inherit g without a" is impossible.
A possibility would be to disable the warning when a virtual method is
declared after inheritance.
> class c =
> object
> inherit a
method virtual g : int
> inherit b
> method h = 99
> end
This seems reasonable to have no warning in this case, the intention
being explicit enough.
Of course, if there is no definition of g in b, the definition from a
would be kept (we don't change the semantics, just the warning).
Would this avoid your problem?
Other solutions would imply new syntax, for something that is no more
than a warning.
Jacques Garrigue
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2003-09-10 1:06 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-06 22:26 [Caml-list] Is there a compact syntax for masking methods in an inherit Ryan R Newton
2003-09-07 8:03 ` Jacques Garrigue
[not found] ` <1063148703.27949.43.camel@moremischief>
2003-09-10 1:06 ` Jacques Garrigue
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox