JavaScript中通用模板文字函数的标签 如何定义带标签的模板功能示例代码

问题描述

我的目标是编写一个类似的标记模板函数

@Cacheable(value = "moviesCache")
public Collection<Movies> getMovies() {
    Collection<Movies> moviesList = new ArrayList<>();
    
    //populate moviesList by going to the DB within a Try/Catch. Return an empty list if it fails or 
    //a list of movies if it doesn't

    return moviesList;
}

@Cacheevict("moviesCache")
public void resetMoviesCache() {

}

...的行为类似于javascript中的认模板文字函数

我的第一次尝试是

myTemplateTagFunction`some text ${variable} etc. etc.`

但这很快就消失了...

let mytaggedTemplate = args => `${args}`

肯定有一种更简单的方法来实现我所缺少的吗?

解决方法

也许有更短的方法,但这是我的方法:

const myTaggedTemplate = (strings,...vars) => {
    let result = '';
    strings.forEach((str,i) => {
        result += `${str}${i === strings.length - 1 ? '' : vars[i]}`;
    });
    return result;
};
,

如何定义带标签的模板功能

如果定义标记的模板函数,则它必须接收字符串数组作为第一个参数,并接收任意数字的表达式作为后续参数。字符串是插入表达式之间(所有${...}之间)的所有字符串,所有表达式都是放入${...}中的值。

示例代码

let numExp = 2;

function tagFunction(strings,...expressions) {
  let returnString = "";
  for (let i = 0; i < expressions.length; i++) {
    returnString += strings[i] + expressions[i];
  }
  returnString += strings[strings.length - 1];
  return returnString;
}

console.log(
  tagFunction`Using function \"${tagFunction.name}\" with ${numExp} expressions`
);

,

您需要更改功能:

let myTaggedTemplate = (strings,...values) => ...;

并尝试遵循this link

中的示例