Tag: scala

使用已安装的spark和maven将Spark Scala Program编译为jar文件

仍然试图熟悉maven并将我的源代码编译成jar文件以进行spark-submit。 我知道如何使用IntelliJ,但想了解这实际上是如何工作的。 我有一个EC2服务器,已经安装了所有最新的软件,如spark和scala,并且有我想用maven编译的示例SparkPi.scala源代码。 我的愚蠢问题首先是,我可以使用我安装的软件来构建代码,而不是从maven存储库中检索依赖项,如何从基本的pom.xml模板开始添加适当的需求。 我不完全理解maven正在做什么,我怎么才能测试我的源代码的编译? 据我了解,我只需要有标准的目录结构src/main/scala然后想运行mvn package 。 此外,我想用maven而不是sbt进行测试。

Scala中的Java样式LinkedList

尝试在Scala中实现LinkedList。 我很乐意在scala中创建一个不可变的List作为ADT,如下所示。 sealed trait List[+A] case object Nil extends List[Nothing] case class Cons[+A](head: A, tail: List[A]) extends List[A] 但是,考虑到Scala中存在空引用,尝试使用“null”终止创建具有“null”终止的java样式链表似乎非常难。 我尝试了以下内容 sealed trait Node[+A] case object Empty extends Node[Nothing] case class LinkedList[A](var head: A,var tail: Node[A]) extends Node[A] LinkedList是一个带有可变成员的case类,对我来说似乎很不对。 但由于我必须在每次操作之前区分Empty和LinkedList,我需要模式匹配的帮助。 这是正确的方法吗? 或者有更好的方法吗? 同样在第二个例子中,我不能拥有这样的共变体类型 case class LinkedList[+A](var head: A,var tail: Node[A]) extends Node[A]

在没有sbt的情况下运行sbt创建的应用程序

这是某个问题的后续行动。 当我使用sbt创建Scala包时,我可以使用以下方法之一运行它: 只需在sbt控制台中键入run即可 或者通过创建一个jar文件(使用one-jar或assembly ),并通过键入java -jar myjar.jar在系统控制台中运行此jar java -jar myjar.jar 但我不知道该怎么做 从scala程序运行我的包? (不是sbt scala控制台,通过输入import mypackage._可以正常工作) 在另一个项目中使用我的Scala包? 例如,通过在另一个项目中导入myjar ? 编辑 :你可以忘记我下面关于sbt-start-script因为现在我正在使用sbt-native-packager (我刚试过它并且它有效,但我以前的问题仍未解决)。 我试过使用sbt-start-script但不成功。 target/start脚本创建良好但我得到了这样的错误: $ sh target/start target/start: 2: target/start: Bad substitution Exception in thread “main” java.lang.NoClassDefFoundError: Hi Caused by: java.lang.ClassNotFoundException: Hi … 这里我只在src/main/scala文件夹中有一个main.scala文件,它是: object Hi { def main(args: Array[String]) = println(“Hi!”) } 我在build.sbt使用这些设置: import com.typesafe.sbt.SbtStartScript […]

这是将Java接口转换为Scala的正确方法吗?

我开始学习Scala,我将做一个简单的交叉编译器。 我会支持一些像print这样的指令。 注意:代码片段未经过测试或编译。 这是我在JAVA中要做的。 public interface Compiler{ String getPrintInstruction(); } public class JavaCompiler implements Compiler{ public String getPrintInstruction(){ return “System.out.print(arg0);” } } public class ScalaCompiler implements Compiler{ public String getPrintInstruction(){ return “print(arg0);” } } 片段下面是正确的“Scala方式 ”吗? trait Compiler { var printInstruction: String } class JavaCompiler extends Compiler { var printInstruction = “System.out.print(arg0);” } class ScalaCompiler […]

JVM是否自动关闭文件?

在某处我读到没有必要自己关闭它,只需离开它,JVM将帮助你做到这一点。 这是真的吗? 假设我需要从文件中获取数据 Source.fromFile(fileName).getLines() 直接,没有 val source = Source.fromFile(fileName) val lines = source.getLines() ………… source.close() 第一种方式,我无法直接访问源并关闭它。 我的JVM工作了很长时间。 我需要关闭一个文件(需要关闭未使用的资源)。 如果有人可以在这里留下一些链接或解释,那将是很棒的。

适用于Android的Scala库

我现在读了一个话题IntelliJ Idea 12 + Android + Scala ,这似乎是我所需要的。 但是,我需要稍微不同的东西:我只想在Scala中创建一个库并在android项目中使用它。 那个android项目也可以使用Java或Scala,没关系。 我不想在Scala中创建一个完整的android项目。 那么我该如何创建这样的库? 我是否需要使用http://fxthomas.github.io/android-plugin/上的教程创建一个android项目 ? 或者一个普通的scala库 ,根本不了解android(事实上它将在android项目中使用),然后当我将它添加到android项目时,我将不得不以某种方式添加scala支持? PS我使用IntelliJ Idea 12和sbt。

使用javareflection在scala中获取具有特定注释的方法参数

我使用aspectj在scala使用aop。 我有一个方法 def delete(@Id id:Long, name:String) 如何在Aspect文件中获取id的值。 @Around(“execution (* com.myapp.Employee.delete(..))”) def message(joinPoint: ProceedingJoinPoint): Object = { val methodSignature =joinPoint.getSignature.asInstanceOf[MethodSignature] //get the value of the field id joinPoint.proceed } 我无法获得价值。 如果我试试 val res = methodSignature.getMethod.getParameterAnnotations res.map(annotations => println(“size = “+annotations.length)) 始终将大小打印为0。 编辑:现在我正确的大小。 该方法是object 。 但我认为javareflection读取object存在一些问题。 我换了class ,现在能够得到注释。 但是,如何获取使用该注释注释的参数?

从版本2.11开始,scalareflectionfunction(特别是wrt注释)的(当前)状态是什么?

scala似乎是JVM世界的一个很好的补充。 它让我想起了嵌套在JVM世界中的C ++,C#和Swift的奇怪混合体。 但是,由于缺少或过时的文档,许多scala的function可能无法访问。 就其reflection能力而言,这似乎尤其如此。 例如,我正在评估是否可以使用scala注释在运行时或编译时扩充scala类。 我使用的是最新的scala版本2.11。 作为一个激励性的例子,让我说我创建一个case class SimpleAnnotation() extends StaticAnnotation 。 我想在运行时找到带有该注释的所有case class 。 这可能是注释最典型和最简单的用例。 在C#和Java中,在运行时确定给定的类是否被注释是相对简单的。 这是一个规范的用例,带有规范的答案。 然而,在scala中,我不清楚我应该做些什么来实现这种行为,甚至是否可能。 特别是,在scala注释和reflection上扫描一些以前的材料后,我想知道: 这可能吗? 这只能在运行时或complile时间吗? 这只能在scala版本2.10之前或之后实现吗? 这只能在scala类上使用Java注释吗? 为什么getClass[AnnotatedClass].getAnnotations返回如此看似乱码的信息? 为什么宏和reflection似乎在scala中混淆了? 任何指导都表示赞赏……我确信我不是唯一一个感到困惑的人。

将scalafunction添加到现有的EJB eclipse项目中

我在Eclipse Helios中设置了一个现有的EJB项目,并希望将Scala慢慢引入该项目。 Scala IDE已成功安装,我可以创建独立的scala项目。 然而,当尝试使用scala添加项来使用我现有的项目时,就出现了这个问题。 我已经开始手动编辑项目主目录的.settings下的.project,.classpath和相关文件。 但是我仍然遇到Java编译器尝试编译.scala类的问题,这会导致错误并最终无法构建项目。 有没有人遇到类似的情况或有任何解决方法? 提前致谢。

@AspectJ。 scala(可能是java)lambdas的切入点

scala lambdas有可能有poitcut吗? 如果我没有弄错scala lambdas现在编译方式与java lambdas相同,所以我认为我的问题也适用于java lambdas,但我不确定。 这是代码。 基本上我想建议Runnable实例。 如果我使用类或匿名类,它可以很好地工作,但是如果我使用lambdas则它不起作用。 @Around(“execution(* (com.test..* && java.lang.Runnable+).run())”) def runnableAspect(pjp: ProceedingJoinPoint): Any = { println(“Runnable caught”) pjp.proceed() } 这是测试代码: package com.test class Greet { def hello(): Unit = { println(“—–start——–“) run(new Runnable { override def run(): Unit = println(“anonymous class”) }) println(“——————“) run(() => println(“lambda”)) println(“—–end——–“) } private def run(r: […]