There were a few mistakes in my previous emails code. I tried out the basic concept
though...but it was a failure. here's a simplified version of code. This is real code
and I have run it through rebol:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CODE BEGINS HERE
state: make object! [
new: func [
puzzle [block!]
][
return make object! [
puz: copy reduce puzzle
get-puzzle: :get_puzz
]
]
get_puzz: does [return copy puz]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;: TEST CODE
; comment {
test-obj: new [1 2 3 4 0 5 6 7 8]
print test-obj/get-puzzle
; }
]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CODE ENDS HERE
Now if you copy this code and run it, you get the following error:
** Script Error: puz has no value.
** Where: return copy puz
>>
I was really hoping this would work. It seemed like an elegant solution. I don't
understand why get-puzzle cannot access word 'puz.
Previously, you ([EMAIL PROTECTED]) wrote:
> Well...I thought about this a bit and I THINK I found an elegant solution. So I
>guess I'll respond to my own question...
>
> I think the solution to this problem is inner objects. Here is an example:
>
> myobject: make object! [
> - function1: func[][..]
> - function2: func[][..]
> - .
> - .
> - make: func[var1 var2 var3][
> - return make object! [
> - instancevar1: var1
> - instancevar2: var2
> - instancevar3: var3
> -
> - instancefunc1: function1 ;copies a reference to function1 above...
> - instancefunc2: function2
> - ]
> - ]
> ]
>
> ;;;create instance of object
> coolobj: myobject/make
> coolobj/instancfunc1 ; all instances access same function! less overhead if many
>objects!!!
> .
> .
> .
> I am not sure if this would work since I have never tested it (yet). The questions
>in my mind are:
> 1. are functions copied by reference or value? if by value, this would not solve my
>problem
> 2. do inner objects have access to outer object words? for example, can
>'instancefunc1 access 'function1 as shown above?
>
> I hope this works. If it does, it would be a very simple but elegant solution to my
>problem. It would be even more elegent when modules come around so I can keep all
>private words in context of myobject rather than the actual object returned...making
>code very clear.
>
> Rishi
>
>
> Previously, you ([EMAIL PROTECTED]) wrote:
> > I am working on a program which requires about 1000 or so instances of objects. It
>doesn't have to be OO but I like the design better that way. I am using a function as
>constructor like the following example (not real code..):
> >
> > ;I used dashes to keep formatting intact (hopefully this works)
> >
> > make_myobject: func[var1 var2 var3][
> > --return make object! [
> > ----instancevar1: var1
> > ----instancevar2: var2
> > ----instancevar3: var3
> >
> > ----instancefunc1: func[][...]
> > ----------------.
> > ----------------.
> > ----------------.
> > -]
> > ]
> >
> >
> > The thing I don't like about this solution is that every instance of this object
>has duplicate copies of the functions (As far as I know...please correct me if I am
>wrong). This seems like a waste to me - especially if the object has 50 or so
>functions. Is there any OO way in Rebol to create multiple instances of this object
>without creating multiple copies of the functions associated with each object? I know
>how to do this in a non-object oriented fashion but would like to see an OO solution.
> >
> >
>
>