Rascal中C风格define命名转驼峰命名的实现及报错问题
报错原因
你使用的脚本语言中,replaceAll 函数的返回值并非单一字符串,而是 (替换后字符串, 总替换次数, 匹配到的所有子串列表) 三元组。你直接将该三元组赋值给了声明为 str 类型的 rVal 变量,后续使用时类型不匹配,因此抛出了「期望str类型,实际得到tuple类型」的错误。
如果要保留该语句逻辑,只需要取返回三元组的第一个元素即可:
rVal = replaceAll(rVal, "_", "")[0];
更简便的实现方案
你可以用拆分拼接的逻辑替代查找替换下划线的逻辑,代码更简洁,同时还能避免下划线出现在字符串首尾时的索引越界问题:
private str camelCaseName(n) { // 全转小写后按下划线拆分 str[] parts = split(toLowerCase(n), "_"); // 没有下划线直接返回 if (len(parts) == 1) { return parts[0]; } // 首段全小写,后续每段首字母大写拼接 str rVal = parts[0]; for (int i = 1; i < len(parts); i++) { rVal += toUpperCase(charAt(parts[i], 0)) + slice(parts[i], 1); } return rVal; }
内容的提问来源于stack exchange,提问作者Matty
相关产品推荐
相关产品推荐

