使用 JSweet 转译 Java->JS,“匹配”错误

Posted

技术标签:

【中文标题】使用 JSweet 转译 Java->JS,“匹配”错误【英文标题】:Using JSweet to Transpile Java->JS, 'matches' error 【发布时间】:2021-06-04 17:00:01 【问题描述】:

我是 JS 新手。我编写了两个大型 Java 类,我想使用 JSweet 将它们转换为 JS。第一个较小的转换没有问题。第二个,我碰壁了。它两次抛出此错误,没有其他错误:

Line 55: property 'matches' does not exist on type 'string'. Did you mean 'match'?

我班第55行如下:

private String name;

name 在类级别,稍后由对象构造函数给出一个值,我的意思是它不包含在除类之外的任何其他括号内。 (它恰好是第 55 行,因为我在转换类之前添加了一些以前的骨架类来定义依赖项)

我的一个理论是以下行导致了问题:

if(pointer.content.equals(sub_table.get_name()))

所以我把它改成了这样:

if(pointer.content.compareTo(sub_table.get_name())==0)

想法是这是比较字符串的两种不同方式,JS 中的匹配与匹配也是比较数据的不同方式,也许我试图转换一个 JS 不喜欢的方法。但是,错误并没有改变。有什么线索吗?

【问题讨论】:

您的代码是否试图访问name 变量上的matches 属性? 它执行了两次,但与名称无关。我会尝试编辑它。如果这是答案,我的困惑是为什么错误被指向第 55 行。 【参考方案1】:

问题出在第 350 行:

if((words[i - 2].matches("\\d*") && words[i-1].equals("+")) && words[i].matches("\\d*"))

我改成:

if((isNumeric(words[i - 2]) && words[i-1].equals("+")) && isNumeric(words[i]))

我添加了 isNumeric 作为方法:

public static boolean isNumeric(String strNum) 
    if (strNum == null) 
        return false;
    
    try 
        int i = Integer.parseInt(strNum);
     catch (NumberFormatException nfe) 
        return false;
    
    return true;

仍然不明白为什么错误显示在第 55 行。匹配在 java 中按预期工作,所以 js 或 jsweet 只是不喜欢这样使用它。

【讨论】:

以上是关于使用 JSweet 转译 Java->JS,“匹配”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSweet 将 Java 模块移植到 JS

Node.js开发 ---- ejs源码转译

Vue中js获取url参数,特殊字符的转译、逆转译

js<被转译了咋么办

从java转换后如何修复typescript类文件错误?

从java调用包含'const'的javascript?