当前位置: 首页 > 知识库问答 >
问题:

如何在matlab中运行clojure

慎星纬
2023-03-14

如何从matlab运行clojure脚本?

我尝试了以下方法:使用jdk 1.7运行matlab,然后调用java

MATLAB_JAVA=/usr/lib/jvm/java-7-oracle/jre matlab

在matlab中,设置类路径并使用clojure编译器

javaaddpath([pwd '/lib/clojure-1.5.1.jar'])
import clojure.lang.RT

这里有个错误:

Error using import
Import argument 'clojure.lang.RT' cannot be found or cannot be imported. 

当我编写运行clojure的java类时,一切都可以从控制台运行,但不能从matlab运行。请给出建议。

共有1个答案

濮阳和泰
2023-03-14

这似乎是Clojure不喜欢从Matlab的“动态类路径”运行的问题。使用捆绑的JVM或Java 1.7.0u51,我在OS X 10.9上使用MatlabR2014A时遇到了相同的错误。但是如果我添加clojure-1.5.1。jar通过将静态类路径放入定制的javaclasspath中,将其转换为静态类路径。txt,则Clojure类将可见。

>> version -java
ans =
Java 1.7.0_51-b13 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
>> cloj = clojure.lang.RT
cloj =
clojure.lang.RT@77de6590

在这个答案中,您可以使用“类路径黑客”方法从Matlab命令行向静态类路径添加条目,而不必使用自定义的Matlab设置。这里的答案涉及到编写一个新的Java类,但您可以在纯M代码中进行等效操作。

function javaaddpathstatic(file)
%JAVAADDPATHSTATIC Add an entry to the static classpath at run time
%
% javaaddpathstatic(file)
%
% Adds the given file to the STATIC classpath. This is in contrast to the
% regular javaaddpath, which adds a file to the dynamic classpath.
%
% Files added to the path will not show up in the output of
% javaclasspath(), but they will still actually be on there, and classes
% from it will be picked up.
%
% Caveats:
% * This is a HACK and bound to be unsupported.
% * You need to call this before attempting to reference any class in it,
%   or Matlab may "remember" that the symbols could not be resolved.
% * There is no way to remove the new path entry once it is added.

parms = javaArray('java.lang.Class', 1);
parms(1) = java.lang.Class.forName('java.net.URL');
loaderClass = java.lang.Class.forName('java.net.URLClassLoader');
addUrlMeth = loaderClass.getDeclaredMethod('addURL', parms);
addUrlMeth.setAccessible(1);

sysClassLoader = java.lang.ClassLoader.getSystemClassLoader();

argArray = javaArray('java.lang.Object', 1);
jFile = java.io.File(file);
argArray(1) = jFile.toURI().toURL();
addUrlMeth.invoke(sysClassLoader, argArray);

因此,使用这个javaaddpathstatic()而不是javaaddpath(),您的代码可能会正常工作。

 类似资料:
  • 问题内容: 我需要在Matlab中运行Java .jar文件。 我们将文件称为MyJar.jar,如果有帮助,我正在运行Java 1.8.0_121-b13。 我尝试了不同的解决方案,并收到了这些相应的错误 我已经设置了javaclasspath:C:\ My \ Java \ Class \ Path \ To \ MyJar.jar(即使它没有任何帮助) 我什至已经准备好编辑classpath

  • 我的目标是检查是否在网络上的文件夹中找到具有特定(名称的一部分)的文件,同时考虑到它下面的所有文件夹。要做到这一点,我需要一种方法,以有效地获得一个列表的所有文件和文件夹在给定的文件夹和下面。我的递归函数在本地驱动器上每秒处理2500个项目,但在网络驱动器上每秒只处理几个项目。我需要更快的东西。 核心问题是:获取文件夹中包含isDirectory属性或类似属性的项目列表的最快方法是什么? 我把希望

  • 问题内容: 我在EC2实例上。因此没有GUI。 然后我这样做: 太好了,现在一切正常,对吗? 当我运行代码时: 我得到这个: 问题答案: 打开终端并运行此命令 。每次重新启动计算机时都需要运行此命令。如果一切正常,可以将其添加到启动命令中 还要确保在/ etc / environment文件中有一行 然后,运行测试以查看问题是否得到解决。 所有在使用此功能之前,请注意下面来自sardathrion

  • Docker-compose.yaml 我怎么能那么做?

  • 我是新手,所以如果我错过了一些明显的东西,请事先道歉,但是我不知道如何在WebStrem中运行JavaScript。网络Storm留档说只需在浏览器中打开超文本标记语言文件,但这似乎不起作用。不管怎样,一切都在codepen.io. 以下是超文本标记语言(用于简单的天气应用程序): 这是脚本(仍在草稿中,因为它需要扩展以链接到涵盖“天气”所有值的图像): 非常感谢任何帮助!

  • 在本文中,我们将学习如何使用FreeNAS运行MinIO。 1. 前提条件 FreeNAS已经安装并运行,如果没有,请参考安装说明 你有一个FreeNAS Jail path set,如果没有,请参考jails configuration 2. 安装步骤 创建一个新的Jail 在FreeNAS UI中找到Jails -> Add Jail,点击 Advanced,然后输入如下信息: Name: