Improve manual on inheriting attributes

Expands first paragraph a bit
Adds a more comprehensive example
This commit is contained in:
Eric Wolf 2018-01-27 15:10:51 +01:00
parent e09161d05c
commit 0167eac571

View file

@ -61,7 +61,7 @@ evaluates to <literal>"foobar"</literal>.
<simplesect><title>Inheriting attributes</title> <simplesect><title>Inheriting attributes</title>
<para>When defining a set it is often convenient to copy variables <para>When defining a set or in a let-expression it is often convenient to copy variables
from the surrounding lexical scope (e.g., when you want to propagate from the surrounding lexical scope (e.g., when you want to propagate
attributes). This can be shortened using the attributes). This can be shortened using the
<literal>inherit</literal> keyword. For instance, <literal>inherit</literal> keyword. For instance,
@ -72,7 +72,15 @@ let x = 123; in
y = 456; y = 456;
}</programlisting> }</programlisting>
evaluates to <literal>{ x = 123; y = 456; }</literal>. (Note that is equivalent to
<programlisting>
let x = 123; in
{ x = x;
y = 456;
}</programlisting>
and both evaluate to <literal>{ x = 123; y = 456; }</literal>. (Note that
this works because <varname>x</varname> is added to the lexical scope this works because <varname>x</varname> is added to the lexical scope
by the <literal>let</literal> construct.) It is also possible to by the <literal>let</literal> construct.) It is also possible to
inherit attributes from another set. For instance, in this fragment inherit attributes from another set. For instance, in this fragment
@ -101,6 +109,26 @@ variables from the surrounding scope (<varname>fetchurl</varname>
<varname>libXaw</varname> (the X Athena Widgets) from the <varname>libXaw</varname> (the X Athena Widgets) from the
<varname>xlibs</varname> (X11 client-side libraries) set.</para> <varname>xlibs</varname> (X11 client-side libraries) set.</para>
<para>
Summarizing the fragment
<programlisting>
...
inherit x y z;
inherit (src-set) a b c;
...</programlisting>
is equivalent to
<programlisting>
...
x = x; y = y; z = z;
a = src-set.a; b = src-set.b; c = src-set.c;
...</programlisting>
when used while defining local variables in a let-expression or
while defining a set.</para>
</simplesect> </simplesect>