Jeremy,
On Wed, Feb 27, 2019 at 11:53 PM Jeremy Roussak via 4D_Tech < 4d_tech@lists.4d.com> wrote: > Objects pre-date ORDA, as you know. True. In this case what we are really talking about is 4D's object notation. I tend to use 'ORDA' for all the new capabilities and should be more specific. > I was simply using an object as a way of permitting a method to return > several values at the same time. Those values happened to be pointers to > variables (created by OBJECT DUPLICATE and so necessarily referenced using > pointers). I wanted then to copy the value in the variable pointed to by > one pointer into the variable pointed to by another pointer. The two > variables were of identical type, one having been created by duplicating > the other. > I find this an excellent application of using objects as containers for passing parameters to and retrieving values from a method. Since you mention OBJECT DUPLICATE you must be working with variables on a form. In that context using Form removes the need to work with pointers altogether. > There was therefore no reason why > > $to.ptr-> := $from.ptr-> > > should have created any error at all; yet it did, and it was an error for > which I can find no logical explanation, particularly given that the > assignment did actually take place. Further, if I complicate the code by > writing > Perhaps you didn't create $to and $from with New object before using them? Try running this: C_OBJECT($to;$from;$obj) C_LONGINT($i;$j;$k) $to:=New object $from:=New object $i:=100 $from.ptr:=->$i $to.ptr:=$from.ptr $k:=$to.ptr-> // $k = 100 To use the code as you wrote it you must also initialize the property you are writing to: $from.ptr:=->$i $to.ptr:=->$k $to.ptr->:=$from.ptr-> // $k = 100 But if this happens $i:=100 $from.ptr:=->$i $to.ptr:=->$k $to.ptr->:=$from.ptr-> $i:=200 $k:=$from.ptr-> // $k = 200 This was a useful exercise for me. I didn't realize you could use pointers this way in objects. I don't think it's a particularly good way to work with them but it looks like there is some fairly rigorous type checking going on under the hood. For example, I expected this to work: $i:=100 $from.ptr:=->$i $k:=$from.ptr but it doesn't because $k isn't a pointer. However: $i:=100 $from.ptr:=->$i $to:=OB Copy($from;True) $i:=200 $k:=$to.ptr // $k = 100 does work because I use the True flag to resolve the pointers to their values. This also points out (discovered pun) the fact that within an object properties are dynamically typed ($to.ptr is currently a number). OB Copy was a great tool in pre-ORDA days as a way to build a template of an object based on fields and then use it to create data objects. C_POINTER(p1; p2) > p1:=$from.ptr > p2:=$to.ptr > p2-> := p1-> > > I get no errors, interpreted or complied. > Mixing 'classic' 4D code with 'ORDA' code is tricky. You can wind up spending so much time converting between the two there's just not much benefit. Where it excels is when you start with a new method and use ORDA to refactor some task in old code. Generally I will have 2/3 the code to accomplish the same results. Less code is better. And some things are still just faster in 'classic' 4D. Large queries for instance. "Large" meaning tables with millions of records or extensive relations. Or long loops where you are doing queries. OTOH I hear from guys with big applications ORDA is generally faster than SQL. In situations where I'm working with smaller sets (thousands or less of records) I love working with ORDA. And forms are just amazing using ORDA, Form, dynamic form variables and object notation. -- Kirk Brooks San Francisco, CA ======================= What can be said, can be said clearly, and what you can’t say, you should shut up about *Wittgenstein and the Computer * ********************************************************************** 4D Internet Users Group (4D iNUG) Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **********************************************************************