在 DataWeave 2.x 中组装字符串(高效)

age*_*ntv 1 dataweave mulesoft

我想在 DataWeave(DW 2.0,Mule Runtime 4.3)中编写一个函数,该函数可以用带有 * 的横幅装饰一条文本消息,主要是为了帮助调用日志中的事件。

我想到的是这个,但感觉还是有点鲁布·戈德堡。那么有没有更有效的方法来编写我忽略的这个?

%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)
Run Code Online (Sandbox Code Playgroud)

这给了我:

***************
* Hello World *
***************
Run Code Online (Sandbox Code Playgroud)

**********
* WT 3-4 *
**********
Run Code Online (Sandbox Code Playgroud)

分别。

我对此有很多反对意见,但这个问题主要是关于横幅字符串的构建。

var standout = 1 to (sizeOf(in) + 4) map "*" joinBy ""
Run Code Online (Sandbox Code Playgroud)

必须有比在宽度参数上使用 map() 和 joinBy() 更好的算术组合字符串的方法。

对?

age*_*ntv 7

嗯,这很尴尬。当这个想法被重构用于字符串插值和使用正确的工具时,答案看起来会好得多。

%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)
Run Code Online (Sandbox Code Playgroud)

高度贴切的输出然后变成:

***************************
* Read the Release Notes! *
***************************
Run Code Online (Sandbox Code Playgroud)