Jen*_*off 5 string-interpolation vala genie
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])")
Run Code Online (Sandbox Code Playgroud)
print(@ ... ) 和lines_add(@ ...) 中@ 的作用是什么?
由于这适用于 Genie 和 Vala,我认为它更适合作为一个独立的问题。
概念性问题是:
Vala 和 Genie 中的字符串插值如何工作?
Vala 和 Genie 中有两种字符串插值选项:
\n\nprintf 风格的函数:
\n\nvar name = "Jens M\xc3\xbchlenhoff";\nvar s = string.printf ("My name is %s, 2 + 2 is %d", name, 2 + 2);\nRun Code Online (Sandbox Code Playgroud)\n\n这可以使用 varargs 来实现,您必须将具有正确类型的多个参数传递给 varargs 函数(在本例中string.printf)。
字符串模板:
\n\nvar name = "Jens M\xc3\xbchlenhoff";\nvar s = @"My name is $name, 2 + 2 is $(2 + 2)";\nRun Code Online (Sandbox Code Playgroud)\n\n这可以使用“编译器魔法”来实现。
\n\n模板字符串以@"(而不是"普通字符串开头)开头。
模板字符串中的表达式以 开头$并用 括起来()。当表达式不包含空格(如上$name例所示)时,括号是不必要的。
表达式在被放入由字符串模板生成的字符串之前会被计算。对于不是类型的表达式,string编译器会尝试调用.to_string (),因此您不必显式调用它。在$(2 + 2)示例中,表达式2 + 2被求值4,然后4.to_string ()使用将结果调用"4",然后可以将其放入字符串模板中。
PS:我这里使用Vala语法,只需删除;s即可转换为Genie。