Tag: 斯卡拉

JMockit能和scala一起工作吗?

我GOOGLE了一点,在我看来,这是可能的。 但是当我尝试这样的: class Calc { def sum(first: Int, second: Int) = { first + second } } 和“考”类: class CalcTest { @Test def testSum(@Mocked test: Calc) { new NonStrictExpectations() {{ test.sum(2, 3) times = 1 result = Int.box(5) }} Assert.assertEquals(5, test.sum(2, 3)) } } 我有一个例外: java.lang.IllegalAccessError:试图从com.kvg.client.CalcTest类访问类mockit.Invocations $$ com.vg.client.CalcTest $$ anon $ 1。(CalcTest.scala:11)at com.kvg .client.CalcTest.testSum(CalcTest.scala:9)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native […]

我如何在我的开发环境中管理多个版本的Scala && SBT?

我刚刚完成了令人敬畏的Coursera Scala课程,并渴望通过探索一些现有的开源项目继续学习更多有关Scala的知识。 不过,我试图让其中的一些在本地运行时遇到了困难。 我来自Ruby的背景,我们使用rvm或rbenv等工具来管理一个系统上的多个Ruby解释器/版本。 Scala用户如何处理使用不同版本的Scala / SBT的项目? 我怀疑我错过了一件大事,因为这似乎不是一个流行的问题。 请注意,我对Java和JVM的世界是相当新的。

Mirah对JRuby,Groovy和Scala提供了什么?

Mirah语言比JRuby,Groovy和Scala提供了什么?

为什么Scala的Option 没有直接转换为字节码中的T?

有一件事我不明白斯卡拉,为什么空尽管没有通过替代测试的子类所有的东西。 大概这是为了Java的兼容性,这是好的,我猜 – 但是然后Scala推动Option [T]模式。 这我不明白。 一个选项[T]不给你任何额外的保证(因为每个T是一个事实上的选项无论如何)。 但它也总共有4个州: val a: Option[String] = null val b: Option[String] = Some(null) val c: Option[String] = None val d: Option[String] = Some("A string") 这看起来既低效(从字节码pov),甚至可能比痛苦的Java更糟糕。 我的问题是,为什么Scala没有将Option [T]直接翻译成java字节码T,所有与Java代码(使用引用)的接口都必须通过这个Option [T] ,正是这样)。 而且会有一个注释或者什么,因为当一个Scala方法与一个不能是None的T协同工作的时候。 这似乎是最明显的正确的,最安全的和最有效的。 谢谢

类型推断是多么昂贵?

我绝对比Scala类型推理引擎更激动,但是在真实的世界环境中: 有多少表现退缩? 在编译时或运行时,何时推断出类型?

了解GenericTraversableTemplate和其他Scala集合内部

我和一个熟悉的Kotlin,Clojure和Java8的粉丝交换了电子邮件,问他为什么不是Scala。 他提供了很多原因(斯卡拉太学术,功能太多,不是我第一次听到这个,我认为这是非常主观的),但他最大的痛点就是一个例子,他不喜欢一种语言,他可以不理解基本数据结构的实现,他给了LinkedList一个例子。 我查看了scala.collection.LinkedList并计算了我所了解或理解的东西。 CanBuildFrom – 经过一番努力,我得到它,类型班,不是历史上最长的遗书[1] LinkedListLike – 我不记得我在哪里阅读,但我确信这是有一个很好的理由 但后来我开始盯着这些 GenericTraversableTemplate – 现在我正在挠我的头… SeqFactory,GenericCompanion – 好吧,现在你失去了我,我开始明白他的观点 谁能理解这个好请解释GenericTraversableTemplate SeqFactory和GenericCompanion在LinkedList的上下文? 他们是什么,对最终用户有什么影响(例如,我确信他们在那里有一个很好的理由,这是什么原因?) 他们出于实际的原因吗? 还是可以简化的抽象层次? 我喜欢Scala集合,因为我不需要了解内部组件就能够有效地使用它们。 我不介意复杂的实现,如果它帮助我保持简单的使用 。 例如,如果我有能力使用它来编写清洁更优雅的代码,我不介意付出复杂的库的代价。 但它会更好地理解它。 [1] – Scala 2.8收藏图书馆是“历史上最长的遗书”吗?

我怎样才能防止一个Scala函数接收'null'作为参数

我有这个签名的Scala方法: def m (map: Map [String, _]) 我想Map是一个引用类型,因此,我可以调用m传递null m (null) // Allowed call 有没有办法让编译器不允许null是一些方法调用? 像Kotlin这样的其他语言可以明确地说明一个参数可以为null: http : //kotlinlang.org/docs/reference/null-safety.html 在Scala中有这样的东西吗? 编辑:谢谢你的意见。 我知道'空'引用是一个运行时间的问题,但其他语言与其他类型的系统在编译时考虑到这一点。 我只想知道在Scala中是否还有一种方法(我正在开始使用该语言)。 检查评论,答案和斯卡拉类型层次我客人这是不可能的。 对于值对象(像不可变集合和大小写类),避免'null'是有意义的(但是它们扩展了AnyRef )。 我可以尝试避免'空',但是例如,如果找不到键,Map.get返回'null',所以我必须处理这个。 关于Map[String, _]它是一个异构的映射,把它想象成一个JSON对象。 我可以用另一种更像Scala的方式处理这个问题吗? 谢谢!

如何使用SnakeYAML转储嵌套列表

我正在解析这个yaml文件 View: from : 01.01.2007 to : 04.01.2007 driver : sun.jdbc.odbc.JdbcOdbcDriver 在Scala中使用SnakeYAML是这样的: val stream = getClass.getResourceAsStream("/config_view.yml") var configMap: Map[String, Any] = new Yaml().load(stream).asInstanceOf[java.util.Map[String, Any]].asScala var view = configMap("View").asInstanceOf[java.util.LinkedHashMap[String, String]].asScala view = view + ("from" -> "neu") // some test modifying 我像这样转储它: val fileWriter = new FileWriter(System.getProperty("user.home") + "\\Desktop\\test.yml") new Yaml().dump(Map[String, Any]("View" -> view.asJava).asJava, fileWriter) 这样可以保存新的yaml文件: […]

函数式编程:如何继承一系列验证规则的上下文

我有一套用于验证的函数(规则),以上下文为参数,并返回“Okay”或“Error”。 基本上这些可能会返回一个Maybe (Haskell)/ Optional (Java)类型。 在下面,我想验证一个Fruit (上下文)的属性,并返回一个错误消息,如果验证失败,否则“好”/无。 注意:我更喜欢纯粹的功能风格和无状态/不可变的解决方案。 实际上这是一个卡塔。 对于我的实验,我使用Kotlin,但核心问题也适用于支持更高阶函数(如Java和Haskell)的任何语言。 你可以在这里找到完整源代码的链接,在最底部也是一样。 给定一个水果类的颜色和重量,再加上一些示例规则: data class Fruit(val color:String, val weight:Int) fun theFruitIsRed(fruit: Fruit) : Optional<String> = if (fruit.color == "red") Optional.empty() else Optional.of("Fruit not red") fun fruitNotTooHeavy(fruit: Fruit) : Optional<String> = if (fruit.weight < 500) Optional.empty() else Optional.of("Too heavy") 现在我想使用对各个函数的引用来链接规则评估,而不使用FruitRuleProcessor将上下文指定为参数。 处理规则失败时,不应该评估任何其他规则。 例如: fun checkRules(fruit:Fruit) { var res […]

与Java SAM没有2.12 M2标志的Scala互操作

有没有使用Java @FunctionalInterface / SAM / lambda表达式的Java-8 API编写Scala代码的公认技巧? 虽然Java lambda表达式inter-op在M2 http://www.scala-lang.org/news/2.12.0-M2中的一个标志下是可用的,但我更希望类/ AnyVal解决方案可能与scala一起工作功能X特点。 不幸的是,scala.FunctionX扩展AnyRef而不是Any,所以不能使用/混合这些特性到隐式的AnyVal类实现中。 补充:我不完全相信,即使scala.FunctionX是全球特征(从任何延伸)我如何实现我的目标。 我的用例是这样的: 在我的一个项目中,我选择了像Java Stream接口和类一样提供一个带有FunctionalInterfaces的Java-8 API,以便迎合尽可能广泛的基于JVM的客户端语言,例如Closure,Scala和Kotlin。 对于使用我的Java-8 API的每种客户端语言,如果在访问Java-8 API时,我将编写适当的绑定(如果需要的话)以使用特定于语言的习惯用法。 顺便说一句。 我也会对在Kotlin-Java互操作环境中提出的这个问题的任何评论感兴趣。