Rascal:将定义转换为驼峰式

Rascal: Convert define to camelcase

我想将 c 风格的定义名称转换为驼峰式。 示例:BLA_BLA -> blaBla

我创建了以下函数:

private str camelCaseName(n) {
    rVal = n;   
    if (contains(rVal, "_")) { 
        rVal = toLowerCase(rVal);
        for (pos <- findAll(rVal, "_")) {
            up = toUpperCase(stringChar(charAt(rVal, pos + 1)));
            charList = chars(rVal);
            charList = delete(charList, pos + 1);
            charList = insertAt(charList, pos + 1, charAt(up, 0));
            rVal = stringChars(charList);
        }
//      rVal = replaceAll(rVal, "_", "");
    }
    return rVal;
}

这很适合改变大小写。但是,如果我取消对 replaceAll 的注释,则使用字符串的调用会报告“Expected str, but got tuple[value,value,value]”。

我想有更简单的方法来获得此功能。

我不确定 replaceAll 函数出了什么问题,但我会在这段代码上尝试使用静态检查器并阅读它的错误消息。

函数的另一种写法:

private str camelCaseName(str n) {
    words = split("_", toLowerCase(n));

    return "<words[0]><for (w <- words[1..]) {><capitalize(w)><}>";
}
  • 我在参数中添加了一个类型n,这是必须的。
  • 字符串模板是打印字符串内容的好方法。
  • split函数很方便;它将字符串拆分为列表元素。
  • capitalize函数将单词首字母大写