Assemble DataWeave 2.x 中的字符串(高效)
Assemble string in DataWeave 2.x (efficiently)
我想在 DataWeave(DW 2.0,Mule Runtime 4.3)中编写一个函数,它可以用 * 横幅装饰文本消息,主要是为了帮助调出日志中的事件。
我想出来的是这个,但感觉还是有点Rube Goldberg。那么有没有一种我忽略的更有效的写法?
%dw 2.0
output text/plain
var msg = "WT 3-4"
fun banner(in) =
do {
var width = sizeOf(in) + 4
var standout = 1 to (width) map "*" joinBy ""
---
standout ++ "\n* " ++ in ++ " *\n" ++ standout
}
---
//banner ("Hello World")
banner (msg)
这给了我:
***************
* Hello World *
***************
和
**********
* WT 3-4 *
**********
分别
我对此有很多反对意见,但这个问题主要是关于横幅字符串的构造。
var standout = 1 to (sizeOf(in) + 4) map "*" joinBy ""
必须有比在宽度参数上使用 map() 和 joinBy() 更好的算术 assemble 字符串的方法。
对吗?
嗯,这很尴尬。当这个想法被重构为字符串插值并使用 正确的工具时, 答案看起来好多了。
%dw 2.0
output text/plain
import repeat from dw::core::Strings
var msg = "Read the Release Notes!"
fun banner(in) =
do {
var width = sizeOf(in) + 4
var standout = repeat("*", width)
---
"$(standout)\n* $(in) *\n$(standout)"
}
---
banner(msg)
那么高度贴切的输出就变成了:
***************************
* Read the Release Notes! *
***************************
我想在 DataWeave(DW 2.0,Mule Runtime 4.3)中编写一个函数,它可以用 * 横幅装饰文本消息,主要是为了帮助调出日志中的事件。
我想出来的是这个,但感觉还是有点Rube Goldberg。那么有没有一种我忽略的更有效的写法?
%dw 2.0
output text/plain
var msg = "WT 3-4"
fun banner(in) =
do {
var width = sizeOf(in) + 4
var standout = 1 to (width) map "*" joinBy ""
---
standout ++ "\n* " ++ in ++ " *\n" ++ standout
}
---
//banner ("Hello World")
banner (msg)
这给了我:
***************
* Hello World *
***************
和
**********
* WT 3-4 *
**********
分别
我对此有很多反对意见,但这个问题主要是关于横幅字符串的构造。
var standout = 1 to (sizeOf(in) + 4) map "*" joinBy ""
必须有比在宽度参数上使用 map() 和 joinBy() 更好的算术 assemble 字符串的方法。
对吗?
嗯,这很尴尬。当这个想法被重构为字符串插值并使用 正确的工具时, 答案看起来好多了。
%dw 2.0
output text/plain
import repeat from dw::core::Strings
var msg = "Read the Release Notes!"
fun banner(in) =
do {
var width = sizeOf(in) + 4
var standout = repeat("*", width)
---
"$(standout)\n* $(in) *\n$(standout)"
}
---
banner(msg)
那么高度贴切的输出就变成了:
***************************
* Read the Release Notes! *
***************************