Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Rascal中引用Java文件_Java_Rascal - Fatal编程技术网

在Rascal中引用Java文件

在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

我无法从Rascal中引用Java文件。我想在多个线程中执行一个操作,我认为Rascal不支持这一点。为了尝试在Rascal中使用Java源代码,我首先尝试重新实现的trim函数。我使用以下流氓代码:

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);