2014-02-20 3 views
5

Мне нужно на самом деле распечатать знак Доллара в Дарт, впереди переменной. Например:

void main() 
{ 
    int dollars=42; 
    print("I have $dollars."); // I have 42. 
} 

Я хочу, чтобы выход был следующим: у меня есть 42 доллара. Как я могу это сделать? Благодарю.

+0

Вы пробовали 'print (" I have \ $ dollars. "); '? (Я вообще не знаю дротиков, я просто догадываюсь) – FrustratedWithFormsDesigner

ответ

7

Dart строки могут быть сырыми или .. не сырой (нормальный? приготовленный? интерпретируемый? Нет формального имени). Я пойду с «интерпретируемым» здесь, потому что он описывает проблему, которая у вас есть.

В исходной строке «$» и «\» ничего особенного не имеют, они просто символы, как и любой другой. В интерпретируемой строке «$» запускает интерполяцию, а «\» запускает escape.

Поскольку вы хотите интерполяцию для «$ долларов», вы не можете использовать «$» в буквальном смысле, так что вам нужно, чтобы избежать его:

int dollars = 42; 
print("I have \$$dollars."); 

Если вы не хотите использовать побег , вы можете объединить строку из сырых и интерпретируемых частей:

int dollars = 42; 
print(r"I have $" "$dollars."); 

Два смежных строковых литералов объединяются в одну строку, даже если они имеют разные типы строки.

+0

Оба метода отлично работают. По какой-то причине я забыл о сыром укусе. Большое спасибо. – rchkm

+0

Существует еще более сложное решение, которое я не хочу рекомендовать, но я думаю, что стоит упомянуть о полноте: используя строковый литерал как выражение интерполяции строк: 'print (" У меня $ {r "$" } $ долларов. ")'. Это ... интересно, но я не нашел случая, когда он более удобен, чем просто отдельные смежные строковые литералы. – lrn

4

Вы можете использовать обратную косую черту, чтобы избежать:

int dollars=42; 
print("I have \$$dollars."); // I have $42. 

При использовании литералы вместо переменных, которые вы также можете использовать сырые строки:

print(r"I have $42."); // I have $42. 
Смежные вопросы