ActionScript 3.0 String With Format?

Как я могу форматировать строку с поставленными переменными в AS3?

//vars
var myNumber:Number = 12;
var myString:String = "Months";
var myObject:MovieClip = year;
//string
myString.txt = "One (?) consists of (?) consecutive (?)", string(myObject), string(myNumber), myString;

поэтому в приведенной выше строке мне бы хотелось, чтобы myString отображал "Один год состоит из 12 последовательных месяцев", но я новичок в AS3 и не знаю, как правильно форматировать строку.

Я уверен, что мне придется указывать числовую переменную в строку, строку (myNumber), но я не знаю, вернет ли переменная ролика в строку string (myMovieClip), вернет имя клипа или создать ошибку. Я готов сделать ставку на более позднюю версию.

3 ответа

Ответ на этот похожий вопрос предполагает использование Formatter class или StringUtil.substitute().

Последний выглядит простейшим; в вашем случае вы будете использовать его следующим образом:

var str:String = "One {0} consists of {1} consecutive {2}";
var newString:String = StringUtil.substitute(str, myObject, myNumber, myString);

substitute() должен автоматически передавать свои аргументы в String, но я не уверен, что, как и в вашем коде, вы можете отличать MovieClip (myObject) как строку.

Еще один хороший вариант, особенно если вы использовали printf в других языках программирования, это сторонняя функция printf-as3.


Литье объектов в строки

Метод toString() определен в классе Object. Таким образом, для всех объектов этот метод определен для них. Поэтому вызов myObject.toString() будет обычно давать вам то, что вы ищете. Некоторые объекты определяют дополнительные методы, такие как date.getHours(), которые возвращают описания строк объекта в другом формате, отличные от того, что предоставляется getString().

Для собственных типов, таких как int, вы можете использовать String (*****).

Объединение строк вместе

Затем вы можете добавить разные части строки следующим образом:

var myString:String = "There are " + String(24) + " hours in a day."

Надеюсь, что это поможет, Dave


Более короткий путь, который я сделал бы, это что-то вроде:

var finalString:String = "One " + myObject + " consists of " + myNumber + " " + myString;

Одна или двойная кавычка инициирует строковый литерал. Если вы используете символ +, чтобы добавить что-то в строковый литерал, он будет автоматически вызывать toString() на этом объекте.

myObject вернет [Object MovieClip], хотя. То, что вы хотите сделать, это создать пользовательский класс, который расширяет MovieClip, а затем переопределяет метод toString(), чтобы вернуть любую строку, которую вы хотите выплевывать.

Надеюсь, что это поможет!

licensed under cc by-sa 3.0 with attribution.