2016-09-11 4 views
1

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

Что такое функция @ в печати (@ ...) и lines_add (@ ...)?

Поскольку это применимо как к Genie, так и к Vala, я думал, что это будет лучше подходит как отдельный вопрос.

Концептуальный вопрос:

Как строка интерполяция работы в Вал и Genie?

ответ

2

Есть два варианта string interpolation в Вал и Genie:

  1. printf-style функция:

    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: Я использую синтаксис Вала здесь, просто удалите ; с, чтобы преобразовать в Genie.

+0

Просто отметьте, что, хотя у Genie официально нет; в конце строк компилятор не жалуется на это. –

Смежные вопросы