@lf_araujo asked in this question:
n^n
@ in print(@ ...)和lines_add(@ ...)的功能是什么?
由于这适用于Genie和Vala,我认为它更适合作为一个独立的问题。
概念性问题是:
字符串插值如何在Vala和Genie中工作?
答案 0 :(得分:2)
Vala和Genie中string interpolation有两个选项:
printf-style函数:
var name = "Jens Mühlenhoff";
var s = string.printf ("My name is %s, 2 + 2 is %d", name, 2 + 2);
这使用varargs,您必须将具有正确类型的多个参数传递给varargs函数(在本例中为string.printf
)。
字符串模板:
var name = "Jens Mühlenhoff";
var s = @"My name is $name, 2 + 2 is $(2 + 2)";
这可以使用"编译魔术"。
模板字符串以@"
开头(而不是"
,它会启动正常的字符串)。
模板字符串中的表达式以$
开头,并附有()
。如果表达式在上例中没有像$name
这样的空格,则括号是不必要的。
在将表达式放入由字符串模板生成的字符串之前对表达式进行求值。对于不属于string
类型的表达式,编译器会尝试调用.to_string ()
,因此您不必显式调用它。在$(2 + 2)
示例中,表达式2 + 2
被评估为4
,然后调用4.to_string ()
将导致"4"
,然后可以将其放入字符串模板
PS:我在这里使用Vala语法,只需删除;
即可转换为Genie。