在Rascal中引用Java文件
我无法从Rascal中引用Java文件。我想在多个线程中执行一个操作,我认为Rascal不支持这一点。为了尝试在Rascal中使用Java源代码,我首先尝试重新实现的trim函数。我使用以下流氓代码:在Rascal中引用Java文件,java,rascal,Java,Rascal,我无法从Rascal中引用Java文件。我想在多个线程中执行一个操作,我认为Rascal不支持这一点。为了尝试在Rascal中使用Java源代码,我首先尝试重新实现的trim函数。我使用以下流氓代码: module thread::threads @javaClass{thread.JavaThread} public java str trim(str s); 很简单。现在,我创建了以下Java文件(基于): 遗憾的是,运行此操作会导致以下错误: rascal>import thre
module thread::threads
@javaClass{thread.JavaThread}
public java str trim(str s);
很简单。现在,我创建了以下Java文件(基于):
遗憾的是,运行此操作会导致以下错误:
rascal>import thread::threads;
|project://Software_Evolution/src/thread/threads.rsc|(42,58,<4,0>,<5,28>): No such Java method: thread.JavaThread.trim(io.usethesource.vallang.IString)
Advice: |http://tutor.rascal-mpl.org/Errors/Static/UndeclaredJavaMethod/UndeclaredJavaMethod.html|
rascal>导入线程::线程;
|project://Software_Evolution/src/thread/threads.rsc|(42,58,,):没有这样的Java方法:thread.JavaThread.trim(io.usethesource.vallang.IString)
忠告:|http://tutor.rascal-mpl.org/Errors/Static/UndeclaredJavaMethod/UndeclaredJavaMethod.html|
但是,Java文件似乎被正确引用,因为稍微更改此名称会导致无法链接方法thread.JavaThreads,因为:class not found
错误
如何调用
JavaThread
文件中的trim
方法?您所做的是正确的。不幸的是,它只需要关闭终端并重新打开,然后再次导入模块,就可以将编译好的Java代码绑定到Rascal模块。希望有帮助 异常报告它正在查找的以下方法签名:
thread.JavaThread.runFunctionThreaded(io.usethesource.vallang.IInteger)
这意味着:
@javaClass{thread.JavaThread}
public java str runFunctionThreaded(int x);
所以你可能在玩不同的类和流氓文件。由于类加载器对重新加载类有点敏感,因此在Rascal类发生更改后,可能需要重新启动REPL
这不是你的问题,但仍然是:看起来你正在尝试向Rascal添加多线程,虽然这是一个非常好的主意,但Rascal有一个全局解释器锁,这会很快停止多线程。目前有很好的理由使用这种GIL,但将来我们可能会放弃这种设计。所以现在,您必须保持它为单线程。计算器不是线程安全的,甚至可能不是线程友好的。注意下一个版本的Rascal编译器,它将生成线程安全代码。哎呀,复制粘贴错误,但是谢谢你对多线程的评论。我想我得等《未来》了:-),谢谢!这确实是解决办法。
@javaClass{thread.JavaThread}
public java str runFunctionThreaded(int x);