最常见的功能是字符串替换/字符串格式化。例如,以下命令之一:
"Hi my name is %s and I'm %s years old" % ("Derp", 12)
或
"Hi my name is {0} and I'm {1} years old".format("Derp", 12)
将被评估为
Hi my name is Derp and I'm 12 years old
在python中。是否有(预定义的)方法在Haxe中做类似的事情?
答案 0 :(得分:2)
烨。
在Haxe中称为String Interpolation。
答案 1 :(得分:2)
相当于:
var name = "Mark";
var age = 31;
var message = 'Hi my name is $name and Im $age years old';
trace(message);
字符串插值是一个编译时功能,它基本上将其转换为:
"Hi my name is " + name + " and I'm " + age + " years old"
如果您使用动态文本(例如翻译和内容)并想要您建议的格式,那么您可以使用这样的正则表达式:
using Main.StringUtil;
class Main {
public static function main() {
var message = "hi my name is {0} and I'm {1} years old".format(["mark", 31]);
trace(message);
}
}
class StringUtil {
public static function format(value:String, values:Array<Any>) {
var ereg:EReg = ~/(\{(\d{1,2})\})/g;
while (ereg.match(value)) {
value = ereg.matchedLeft() + values[Std.parseInt(ereg.matched(2))] + ereg.matchedRight();
}
return value;
}
}
在线尝试:https://try.haxe.org/#381c8
该类顶部的
using
允许将字符串用作mixin"".format()
(在Haxe中称为static extension)。
更新:没有正则表达式,您可以这样做:
using StringTools;
using Main.StringUtil;
class Main {
public static function main() {
var message = "hi my name is {0} and I'm {1} years old".format(["mark", 31]);
trace(message);
}
}
class StringUtil {
public static function format(value:String, values:Array<Any>) {
for (i in 0...values.length) {
value = value.replace('{$i}', values[i]);
}
return value;
}
}