3

@lf_araujo 在这个问题中问

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])")

print(@ ... ) 和lines_add(@ ...) 中@ 的作用是什么?

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

概念问题是:

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

4

1 回答 1

3

在 Vala 和 Genie 中有两个字符串插值选项:

  1. printf 风格的函数:

    var name = "Jens Mühlenhoff";
    var s = string.printf ("My name is %s, 2 + 2 is %d", name, 2 + 2);
    

    这可以使用可变参数,您必须将具有正确类型的多个参数传递给可变参数函数(在这种情况下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"被放入字符串模板中。

PS:我这里使用的是 Vala 语法,只需去掉;s 即可转换为 Genie。

于 2016-09-11T15:17:39.203 回答