Tag: scala

为什么这个Clojure程序这么慢? 如何让它快速运行?

这里清楚地解释了如何优化处理原始值的Clojure程序:使用类型注释和未经检查的数学,它将快速运行: (set! *unchecked-math* true) (defn add-up ^long [^long n] (loop [nni 0 sum 0] (if (< ni) sum (recur n (inc i) (+ i sum))))) 所以,出于好奇,我已经在lein repl尝试过了,令我惊讶的是,发现这段代码运行速度比预期的慢20倍(Oracle JDK 1.8.0_11 x64上的Clojure 1.6.0): user=> (time (add-up 1e8)) “Elapsed time: 2719.188432 msecs” 5000000050000000 Scala 2.10.4(相同的JVM)中的等效代码在~90ms内运行: def addup(n: Long) = { @annotation.tailrec def sum(s: Long, i: Long): Long = […]

如何使用scala作为脚本语言设置jsr223脚本

到目前为止,我已经为scala尝试了jsr223脚本的sling实现,但是无法正确设置它。 当我这样做时: public static void main(String[] args) { try { new ScriptEngineManager().getEngineByName(“scala”). eval(“object HelloWorld {def main(args: Array[String]) { println(\”Hello, world!\”) }}”); } catch (ScriptException e) { e.printStackTrace(); } } 我什么也没得到: javax.script.ScriptException: ERROR org.apache.sling.scripting.scala.Script line 13 : not found: type Script at org.apache.sling.scripting.scala.ScalaScriptEngine.eval(ScalaScriptEngine.scala:117) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) 类似的问题在这里讨论: http : //scala-programming-language.1934581.n4.nabble.com/How-to-compile-Scala-code-from-java-using-the-current-ClassLoader-instead-of-一个字符串为基础,classpat-td1955873.html#a1955873 和 http://dev.day.com/discussion-groups/content/lists/sling-dev/2009-12/2009-12-01_Scala_scripting_support_was_Re_And_another_one____Michael_D_rig.html 也许还有另一个我不知道的实现。 任何帮助赞赏

将Java数组传递给Scala

虽然我已经使用Scala一段时间并且之前已经将它与Java混合,但我遇到了一个问题。 如何将Java数组传递给Scala? 我知道反过来相当简单。 Java to Scala并非如此。 我应该在Scala中声明我的方法吗? 这是我想要实现的一个小例子: 斯卡拉: def sumArray(ar: Array[Int]) = … Java的: RandomScalaClassName.sumArray(new int[]{1,2,3}); 这可能吗?

如何在scala中使用java代理

我有一个Iface接口,它有两个用java编写的方法。 该接口是Zzz类的内部接口。 我在scala中编写了调用处理程序。 然后我尝试在scala中创建一个新的代理实例,如下所示。 val handler = new ProxyInvocationHandler // this handler implements //InvocationHandler interface val impl = Proxy.newProxyInstance( Class.forName(classOf[Iface].getName).getClassLoader(), Class.forName(classOf[Iface].getName).getClasses, handler ).asInstanceOf[Iface] 但是编译器在这里说 $Proxy0 cannot be cast to xxx.yyy.Zzz$Iface 我怎样才能以简短的方式使用代理。

在java或scala中使用dbpedia spotlight

有谁知道在java或scala中如何使用dbpedia聚光灯? 或者任何人都可以解释它是如何完成的? 我找不到任何关于此的信息……

Scala – Java =? (或Clojure – Java =?)

开发人员是否可以在不了解Java的情况下使用Scala? 开发人员是否可以在不了解Java的情况下使用Clojure? 注意:例如我是C#开发人员,我使用.NET而不知道任何VB(当然WF 4.0使用VB语句,所以我拒绝任何涉及WF 4.0的项目:))。 总结I:感谢大家的回答。 现在我可以告诉一个人可以在不知道Java(语言)的情况下使用这些语言。 现在我有另一个问题:如何从Java(JVM)生态系统开始? 什么是初学者,中级和高级知识库(包!)? 老实说Java生态系统对我来说总是有点混乱,因此为学习(曲线!)JVM提供一些“参考参考”和“defacto教程”会非常有帮助。 (好的!我会把它作为另一个问题发布!)

用于引导我的第一个生产scala项目的框架是什么?

我正在为生产应用程序首次涉足scala。 该应用程序目前打包为war文件。 我的计划是创建一个scala编译工件的jar文件,并将其添加到war文件的lib文件夹中。 我的增强function是通过Jersey公开的mysql支持的应用程序,并将通过HttpClient调用与第三方网站集成。 我知道如何通过普通的java做到这一点。 但是当我在scala中做这件事时,我有几个决定点,我正在pussyfooting。 scala 2.7.7或2.8 RC? JDBC通过querulous这个API准备生产了吗? sbt vs maven。 我对maven很满意。 是否有一个用于HttpClient的scala惯用包装器(或者我应该像在java中一样使用它)? 我很想听听你对scala开始的评论和经验。

Scala编译器如何处理具体的特征方法?

如果我有以下Scala类: abstract class MyOrdered extends Ordered[MyOrdered] { def id: Int def compare(that : MyOrdered) : Int = if (that==null) 1 else (id-that.id) } 然后我只需要在Scala中定义id方法来获得具体的类。 但是如果我尝试在Java中扩展它,编译器会说Ordered的所有具体方法都缺失了。 那么,这是否意味着Scala编译器只在具体的Scala类中实现了Ordered的具体方法? 这看起来很浪费,因为我可以有几十个实现MyOrdered的具体类,并且它们都会得到相同代码的副本,实际上将它直接放在基类MyOrdered中就足够了。 此外,这使得创建Java友好的Scala API变得非常困难。 有没有办法强制Scala编译器将方法定义放在应该这样做的地方 ,除了通过使用虚方法实现使类具体化? 甚至更有趣的是在Scala特征中声明一个具体的方法final。 在这种情况下,它仍然没有在扩展特征的抽象Scala类中实现,但它不能在扩展抽象Scala类的Java类中实现,因为它被标记为final。 这绝对是一个编译器错误。 最终的抽象方法毫无意义,即使它们在JVM中是合法的,显然也是如此。

scala中的协变类型参数需要在java接口中保持不变

我有一个看起来像这样的特征(我可以在这个相关问题上找到一些更多的信息,虽然我不认为,这个问题需要它) trait Extractor[-A,+B] { def extract(d:A):B //lots of other things } 要在现有的java框架中使用它,我希望这个Extractor有一个返回Comparator[B] (是java.util.Comparator )的函数,或者甚至更好地扩展Comparator[A] 。 现在这会产生问题,因为Comparator的类型参数应该是不变的,而A是逆变的, B是协变的。 所以我得到这样的错误: scala> import java.util.Comparator import java.util.Comparator scala> trait Extractor[-A,+B] extends Comparator[A] :6: error: contravariant type A occurs in invariant position in type [-A,+B]java.lang.Object with java.util.Comparator[A] of trait Extractor trait Extractor[-A,+B] extends Comparator[A] ^ scala> trait Extractor[-A, +B] { […]

如何找到哪个Java / Scala线程锁定了文件?

简单来说: 如何找到哪个Java / Scala线程锁定了文件? 我知道JVM中的一个类/线程已经锁定了一个具体文件(重叠了一个文件区域),但我不知道如何。 当我在断点中停止应用程序时,有可能找出正在执行此操作的类/线程吗? 以下代码抛出OverlappingFileLockException : FileChannel.open(Paths.get(“thisfile”), StandardOpenOption.APPEND).tryLock().isValid(); FileChannel.open(Paths.get(“thisfile”), StandardOpenOption.APPEND).tryLock()..isShared(); Java / Scala如何锁定此文件( Spark )? 我知道如何使用java.nio.channels锁定文件,但我没有在Spark的github存储库中找到适当的调用。 关于我的问题的更多信息: 1。当我在Windows操作系统中使用Hive运行Spark时,它可以正常工作,但是每次Spark关闭时,它都无法删除一个临时目录(在此之前的其他临时目录被正确删除)并输出以下exception: 2015-12-11 15:04:36 [Thread-13] INFO org.apache.spark.SparkContext – Successfully stopped SparkContext 2015-12-11 15:04:36 [Thread-13] INFO oaspark.util.ShutdownHookManager – Shutdown hook called 2015-12-11 15:04:36 [Thread-13] INFO oaspark.util.ShutdownHookManager – Deleting directory C:\Users\MyUser\AppData\Local\Temp\spark-9d564520-5370-4834-9946-ac5af3954032 2015-12-11 15:04:36 [Thread-13] INFO oaspark.util.ShutdownHookManager – Deleting directory […]