我正在开发一个需要执行JavaScript的Java应用程序.Nashorn JS引擎即将被弃用,替换是Graal SDK提供的一组API,它使用GraalVM.基本上执行多种语言的虚拟机.
至少这是我的想法.所以我花了一天时间试图让它运转起来.我下载了使用JDK 8的GraalVM rc6.我使用IntelliJ IDEA,并将GraalVM添加为新的JDK.我发现奇怪的是我应该添加一个虚拟机作为开发工具包,但我知道它基于JDK 8,所以我很好.
而问题与其他问题不同,我无法让新的软件包运行起来.我的IDE告诉我它无法解决它们.
实际上,没有一个org.graalvm软件包可以解析.
所以我下载了JDK 11 build 28,因为据我所知JDK 11自20版开始就附带了GraalVM.
实际上,在这种情况下,可以找到一些软件包,但远远低于预期:例如org.graalvm.polyglot仍然无法解析.
最后,我尝试从Maven添加Graal SDK并解决了包.现在我在运行时遇到异常:
Context ctx = Context.create(“js”);
Run Code Online (Sandbox Code Playgroud)
在类路径上找不到语言和多语言实现.确保truffle-api.jar在类路径上.
我认为前两个案例中的问题实际上并没有获得GraalVM JDK,但它甚至以这种方式抛出了异常.
有经验的人可以解释一下吗?
I heard that if an expression is followed by a semicolon, then it is considered to be an expression statement.
Source: http://farside.ph.utexas.edu/teaching/329/lectures/node11.html
int x = 7;
x = 8;
x++;
x—-;
x = x << 1;
Run Code Online (Sandbox Code Playgroud)
这些都是表达式语句。
但这也是表达方式吗?
return 5;
Run Code Online (Sandbox Code Playgroud)
如果没有,请彻底解释原因。
如果您能说出返回饱和度是否也可以视为其他语言的表达语句,我也将不胜感激。
在c ++中,您可以比较两个type_info对象。
有std::any班。它具有一个成员.type(),该成员还将返回一个type_info对象,告诉您其包含的类型。我可以使用typeid(THE_TYPE)并比较两者。
以下代码有效:
std::any x = 6;
if (x.type() == typeid(int)) {
cout << "x is int";
}
Run Code Online (Sandbox Code Playgroud)
但是以下操作无效:
std::any x = "string literal";
if (x.type() == typeid(std::string)) {
cout << "x is string";
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何检查变量是否为字符串?