@lf_araujo asked in this question:
var dic = new dict of string, string
dic["z"] = "23"
dic["abc"] = "42"
dic["pi"] = "3.141"
for k in sorted_string_collection (dic.keys)
print (@"$k: $(dic[k])")
What is the function of @ in print(@ ... ) and lines_add(@ ...)?
As this is applicable to both Genie and Vala, I thought it would be better suited as a stand-alone question.
The conceptual question is:
How does string interpolation work in Vala and Genie?
There are two options for string interpolation in Vala and Genie:
printf-style functions:
This works using varargs, you have to pass multiple arguments with the correct types to the varargs function (in this case
string.printf).string templates:
This works using "compiler magic".
A template string starts with
@"(rather then"which starts a normal string).Expressions in the template string start with
$and are enclosed with(). The brackets are unneccesary when the expression doesn't contain white space like$namein the above example.Expressions are evaluated before they are put into the string that results from the string template. For expressions that aren't of type
stringthe compiler tries to call.to_string (), so you don't have to explicitly call it. In the$(2 + 2)example the expression2 + 2is evaluated to4and then4.to_string ()is called with will result in"4"which can then be put into the string template.PS: I'm using Vala syntax here, just remove the
;s to convert to Genie.