User Tools

Site Tools


passing_20substructures_20to_20procedures

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

passing_20substructures_20to_20procedures [2018/03/31 13:19]
127.0.0.1 external edit
passing_20substructures_20to_20procedures [2018/04/17 18:11] (current)
tbest3112 Added syntax highlighting
Line 2: Line 2:
  
 //by Richard Russell, August 2006//\\ \\  As described in the [[http://​www.bbcbasic.co.uk/​bbcwin/​manual/​bbcwin2.html#​structprocfn|main documentation]] you can pass entire structures to a procedure or function as follows:\\ \\  //by Richard Russell, August 2006//\\ \\  As described in the [[http://​www.bbcbasic.co.uk/​bbcwin/​manual/​bbcwin2.html#​structprocfn|main documentation]] you can pass entire structures to a procedure or function as follows:\\ \\ 
 +<code bb4w>
         DIM object{name$,​pos{x,​y,​z}}         DIM object{name$,​pos{x,​y,​z}}
         object.pos.x = 1.0         object.pos.x = 1.0
Line 11: Line 12:
         DEF FN_distance(s{})         DEF FN_distance(s{})
         = SQR(s.pos.x^2 + s.pos.y^2 + s.pos.z^2)         = SQR(s.pos.x^2 + s.pos.y^2 + s.pos.z^2)
 +</​code>​
 However you //cannot// pass an entire **substructure** to a procedure or function. The following code doesn'​t work (it will crash BBC BASIC):\\ \\  However you //cannot// pass an entire **substructure** to a procedure or function. The following code doesn'​t work (it will crash BBC BASIC):\\ \\ 
 +<code bb4w>
         REM This doesn'​t work - don't try it at home!         REM This doesn'​t work - don't try it at home!
         DIM object{name$,​pos{x,​y,​z}}         DIM object{name$,​pos{x,​y,​z}}
Line 22: Line 25:
         DEF FN_distance(p{})         DEF FN_distance(p{})
         = SQR(p.x^2 + p.y^2 + p.z^2)         = SQR(p.x^2 + p.y^2 + p.z^2)
 +</​code>​
 In most cases passing the parent structure instead, as in the first example, isn't a major inconvenience,​ however it does mean that the substructure //must always have the same name// (in this case **pos{}**).\\ \\  It would be desirable to be able to use a common **FN_distance** function (for example) even if the substructure doesn'​t always have the same name; in particular this would make it easier to incorporate the function in a library. There is a way of achieving this, which involves passing to the procedure or function //both// the parent structure //and// the substructure. Here's how you would do it for this particular example:\\ \\  In most cases passing the parent structure instead, as in the first example, isn't a major inconvenience,​ however it does mean that the substructure //must always have the same name// (in this case **pos{}**).\\ \\  It would be desirable to be able to use a common **FN_distance** function (for example) even if the substructure doesn'​t always have the same name; in particular this would make it easier to incorporate the function in a library. There is a way of achieving this, which involves passing to the procedure or function //both// the parent structure //and// the substructure. Here's how you would do it for this particular example:\\ \\ 
 +<code bb4w>
         DIM object{name$,​pos{x,​y,​z}}         DIM object{name$,​pos{x,​y,​z}}
         object.pos.x = 1.0         object.pos.x = 1.0
Line 33: Line 38:
         !(^p{}+4) += !(^s{}+4)         !(^p{}+4) += !(^s{}+4)
         = SQR(p.x^2 + p.y^2 + p.z^2)         = SQR(p.x^2 + p.y^2 + p.z^2)
 +</​code>​
 Note the manipulation of memory in **FN_distance** which makes this work.\\ \\  Now you //can// use the same function with a differently-named substructure:​\\ \\  Note the manipulation of memory in **FN_distance** which makes this work.\\ \\  Now you //can// use the same function with a differently-named substructure:​\\ \\ 
 +<code bb4w>
         DIM newobj{type%,​loc{x,​y,​z}}         DIM newobj{type%,​loc{x,​y,​z}}
         newobj.loc.x = 4.0         newobj.loc.x = 4.0
Line 40: Line 47:
         PRINT FN_distance(newobj{},​newobj.loc{})         PRINT FN_distance(newobj{},​newobj.loc{})
         END         END
 +</​code>​
passing_20substructures_20to_20procedures.txt ยท Last modified: 2018/04/17 18:11 by tbest3112