|
[Date Index]
[Thread Index]
[Author Index]
using Orestis Vantzos OOP package
- To: mathgroup at smc.vnet.net
- Subject: [mg76872] using Orestis Vantzos OOP package
- From: Hannes Kessler <HannesKessler at hushmail.com>
- Date: Tue, 29 May 2007 04:54:48 -0400 (EDT)
Hello,
my question is related to difficulties to use Orestis Vantzos OOP
package (http://library.wolfram.com/infocenter/Conferences/5773/) in
other package files.
The following is from the OOP package
MakeExpression[RowBox[{RowBox[{obj_, "::", msg_}], "[", args___,
"]"}], StandardForm] :=
MakeExpression[RowBox[{obj, "[", RowBox[{"\"" <> msg <> "\"", "[",
args, "]"}], "]"}], StandardForm]
It gives the following interpretation rule for expressions typed in a
notebook
obj::msg[args] -> obj["msg"[args]]
and allows you to write definitions similar to
obj::msg[args] = 1
I saved the OOP package in a file OOP.m and loaded it with
Needs["OOP`"].
The first problem was the following complaint by Mathematica
SetDelayed::"write" : "Tag MessageName in super::"path"[] is
Protected."
resulting from the following line the OOP package
super::path[] := $superPath;
The complaint disappears after changing changing this line to
super["path"[]] := $superPath;
in agreement with the intended interpretation.
Loading the package and using it in a notebook works,
writing in class definitions expressions as for example
volume[] := (4*Pi*self::radius[]^3)/3;
However, using class definitions in package files causes problems.
Here is Vantzos Sphere-example written to TestSphere.m
BeginPackage["TestSphere`", {"OOP`"}];
BeginClass["Sphere`"];
volume[] := 4/3 Pi (self::radius[])^3;
translateBy[\[CapitalDelta]x_] := (self::center[] += \
[CapitalDelta]x);
EndClass[];
EndPackage[];
Loading the package to a notebook and using it leads to errors
Needs["TestSphere`"];
s1<=={"Sphere`", "Object`"};
s1::radius[] = 1;
s1::volume[]
--> 4/3 Pi self::"radius"[]^3
instead of the expected 4/3 Pi
s1::center[] = {1, 0, 0};
s1::translate[{2,0,0}]
--> Error message
AddTo::"rvalue" : "self::"center"[] is not a variable with a value,
so its value cannot be changed."
instead of the expected {3,0,0}
I suspected the above MakeExpression interpretation rule for boxes
does not function in plain text package files.
But attempting
Unprotect[MessageName];
MessageName[a_Symbol, b_String][args___] := a[b[args]]
Protect[MessageName];
does not help either as it generates the error
Message::"name" : "Message name a_Symbol::b_String is not of the
form symbol::name or symbol::name::language."
Any suggestions how to use the OOP package in other package files?
Thanks in advance.
Hannes Kessler
Prev by Date:
Re: Quadratic form: symbolic transformation
Next by Date:
Re: ideas needed!
Previous by thread:
Re: Re: why won't style sheet appear in Stylesheet
Next by thread:
Re: Polynomial to List
|