字符串插值/字符串模板如何工作?

时间:2016-09-11 15:17:39

标签: vala string-interpolation genie

@lf_araujo asked in this question

n^n
  

@ in print(@ ...)和lines_add(@ ...)的功能是什么?

由于这适用于Genie和Vala,我认为它更适合作为一个独立的问题。

概念性问题是:

字符串插值如何在Vala和Genie中工作?

1 个答案:

答案 0 :(得分:2)

Vala和Genie中string interpolation有两个选项:

  1. 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)。

  2. 字符串模板:

    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",然后可以将其放入字符串模板

  3. PS:我在这里使用Vala语法,只需删除;即可转换为Genie。