需求:基于Ballerina实现读取记录键值对的字符串插值函数
实现Ballerina的
interpolateMessage函数 需要实现的函数签名如下:
function interpolateMessage(string msgTemp, *record{||} values) returns string
该函数需读取values记录中的键值对,替换msgTemp字符串中的对应占位符(约定占位符格式为{键名}),最终返回处理后的字符串。
实现代码
function interpolateMessage(string msgTemp, *record{||} values) returns string { string result = msgTemp; // 遍历所有传入的记录参数 foreach record{||} val in values { // 遍历当前记录的每个键值对 foreach string key, anydata value in val.entries() { // 生成目标占位符并执行替换 string placeholder = string `{${key}}`; string valStr = value.toString(); result = result.replace(placeholder, valStr); } } return result; }
代码说明
- 支持传入多个记录参数,通过外层
foreach遍历所有传入的记录 - 利用
entries()方法获取记录的键值对,确保能处理任意结构的空记录类型参数 - 动态构建占位符字符串,调用
replace()方法完成模板替换 - 将值统一转为字符串类型,保证所有类型的参数都能正确嵌入模板
使用示例
public function main() { string orderTemplate = "Customer {customerName}, your {product} delivery is scheduled for {date}."; string finalMsg = interpolateMessage( orderTemplate, {customerName: "Bob", product: "Wireless Headphones"}, {date: "2024-05-20"} ); io:println(finalMsg); // 输出: Customer Bob, your Wireless Headphones delivery is scheduled for 2024-05-20. }
内容的提问来源于stack exchange,提问作者Kavindu Gimhan Zoysa
相关产品推荐
相关产品推荐

