[OpenSCAD] Using children with let

nop head nop.head at gmail.com
Wed Sep 12 11:05:18 EDT 2018


OpenSCAD variables have lexical scope by default, so they can only be seen
in the block they are defined in. So you could do children(a) to access the
23rd child but a is not visible outside leta() and more specifically only
under the let().

However, if you use $a it will have dynamic scope and be accessible in all
the modules and functions called from the block it is defined in.

On 12 September 2018 at 15:06, John Savage <john at jegsav.com> wrote:

> I would like to be able to write a single let() statement and use it on
> multiple modules. A simple example is
>
>
>
> module leta(){
>
>    let(a=23)
>
>       children();
>
> }
>
>
>
> leta() cylinder(h=a, d=a); // Doesn't work, a is unknown here.
>
>
>
> However this does work:
>
>
>
> module move(x){
>
>    translate([x,0,0])
>
>       children();
>
> }
>
>
>
> module cone_rod(){
>
>    cylinder(h=10,d=5);
>
>    cylinder(h=5,d1=15,d2=0);
>
> }
>
>
>
> move(0) cone_rod();      // Works as expected
>
> move(20) cone_rod();     // Works as expected
>
>
>
> What’s the difference and why doesn’t the first example work?
>
> Thanks,
>
> John
>
> _______________________________________________
> OpenSCAD mailing list
> Discuss at lists.openscad.org
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscad.org/pipermail/discuss_lists.openscad.org/attachments/20180912/62bded01/attachment.html>


More information about the Discuss mailing list