首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DataWeave 2.x中组装字符串(高效)

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

Stack Overflow用户
提问于 2020-11-24 16:52:34
回答 1查看 134关注 0票数 1

我想用DataWeave (DW2.0,Mule Runtime4.3)编写一个函数,它可以用*的横幅来装饰文本消息,主要是为了帮助调用日志中的事件。

我想出来的是这个,但感觉还是有点像鲁伯·戈德伯格。那么,有没有一种更有效的方式来写这个,我忽略了吗?

代码语言:javascript
复制
%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)

这给了我:

代码语言:javascript
复制
***************
* Hello World *
***************

代码语言:javascript
复制
**********
* WT 3-4 *
**********

分别使用。

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

代码语言:javascript
复制
var standout = 1 to (sizeOf(in) + 4) map "*" joinBy ""

必须有一种更好的方法来算术组装字符串,而不是在宽度参数上使用map()和joinBy()。

对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 17:27:34

那太尴尬了。当这个想法被重构为字符串插值和使用正确的工具时,答案看起来要好得多。

代码语言:javascript
复制
%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)

然后,高度apt的输出变成:

代码语言:javascript
复制
***************************
* Read the Release Notes! *
***************************
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64991150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档