On 30/07/2019 9:33 PM, Ron Tarrant wrote:
Some things are almost impossible to research. For instance, in the GtkD
wrapper code—specifically the Widget.d file—the following function
definition appears:
gulong addOnDraw(bool delegate(Scoped!Context, Widget) dlg,
ConnectFlags connectFlags=cast(ConnectFlags)0)
{
return Signals.connect(this, "draw", dlg, connectFlags ^
ConnectFlags.SWAPPED);
}
With contemporary search engines, it's impossible to search for '!' and
get meaningful results. And searching for 'Scoped!' results in every
variation of the word 'scope' and ignores the '!' altogether, even with
Google's Verbatim tool turned on. Worse, Google ignores case as well.
I also searched all three D-language books and found nothing.
Here are my questions:
1) What exactly does the '!' mean? For instance, '=' means "is equal
to," but I don't know what words to 'think' while looking at a '!'
Template
https://dlang.org/spec/template.html
2) What does 'Scoped' mean?
Its a type defined by GtkD by the looks.
https://github.com/gtkd-developers/GtkD/blob/e14091fb2df4d05348061f274c131700af89fb16/generated/gtkd/glib/c/types.d#L56
3) In the specific instance above, what does 'Scoped!Context' mean as
opposed to just 'Context'? In other words, what are the differences
between 'Scoped!Context' and 'Context'?
Auto destruction of the argument and you cannot copy its value around.