Tag: scala

如何让Eclipse从SBT中识别依赖关系

我想弄清楚如何让Eclipse识别使用SBT检索的依赖关系? SBT下载正确的依赖关系,并把它们放在我的〜/ .ivy目录中,但eclipse没有看到它们。 有没有办法做到这一点? 谢谢

为什么提升web框架可扩展?

我想知道为什么lift webframework具有高性能和可扩展性的技术原因? 我知道它使用Scala,它有一个演员库,但根据安装说明默认configuration是与jetty。 那么它是否使用演员库来扩展? 现在是开箱即用的可扩展性。 只需添加额外的服务器和节点,它会自动扩展,是如何工作的? 它能处理500000+支持服务器的并发连接吗? 我正在尝试为企业级创build一个Web服务框架,这个框架可以打败那些容易扩展,可configuration和可维护的东西。 我对扩展的定义是增加更多的服务器,你应该能够容纳额外的负载。 谢谢

Scala的types系统的优点

我正在探索Scala语言。 我经常听到的一个说法是,斯卡拉比Java 更强大的types系统。 通过这个我觉得人们的意思是: scalac拒绝某些bug的程序, javac会快乐地编译,只会导致运行时错误。 某些不variables可以在Scala程序中编码,这样编译器不会让程序员编写违反条件的代码。 我是这么想的吗? 如果是这样,请指出说明这些例子的文章/博客/论文。

如何select每个组的第一行?

我有一个DataFrame生成如下: df.groupBy($"Hour", $"Category") .agg(sum($"value") as "TotalValue") .sort($"Hour".asc, $"TotalValue".desc)) 结果如下所示: +—-+——–+———-+ |Hour|Category|TotalValue| +—-+——–+———-+ | 0| cat26| 30.9| | 0| cat13| 22.1| | 0| cat95| 19.6| | 0| cat105| 1.3| | 1| cat67| 28.5| | 1| cat4| 26.8| | 1| cat13| 12.6| | 1| cat23| 5.3| | 2| cat56| 39.6| | 2| cat40| 29.7| | 2| cat187| […]

Scala的静态分析工具的当前状态是什么?

我在Scala中看到了一个关于静态分析的StackOverflow问题,但是那个在2009年得到了答案。如您所知,Scala工具变化非常迅速。 因此,我想知道是否有人熟悉Scala中静态分析工具的当前状态可以告诉我是否有一个与Scala相当的Findbugs。 我发现Findbugs为Scala发布了许多不必要的警告,可能是由于特性等原因,“对象”单例编译为字节码的方式。我听说Scalastyle不仅是Java的CheckStyle的Scala版本,它也包括Findbugs和PMD。 但是,如果它没有实现所有Findbugs和/或PMD,那么是否还有其他工具可以补充它? 或者,Scalastyle不仅适用于样式检查,还可以改善代码质量? 另外,斯卡拉与Sonar的整合呢? Scala声纳插件(与Scalastyle一起使用)是否可靠?

在地图操作中元组拆包

我经常发现自己在处理元组的列表,序列和迭代器,并且想要做如下的事情, val arrayOfTuples = List((1, "Two"), (3, "Four")) arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 } 然而,编译器似乎从来没有认同这个语法。 相反,我最终写作, arrayOfTuples.map { t => val e1 = t._1 val e2 = t._2 e1.toString + e2 } 这是愚蠢的。 我怎样才能解决这个问题?

是否有一个类似dbunit的框架不能吸引java / scala?

我正在考虑制定一个新的轻量级数据库人口框架。 我绝对讨厌dbunit。 在我做之前,我想知道是否有人已经做到了。 我不喜欢dbunit的东西: 1)不build议使用最简单的写入和上手格式。 他们希望你使用臃肿的格式。 有些甚至需要XML模式。 好吧,无所谓了。 2)它们不是按照你写的顺序填充行,而是按照顺序在xml文件中定义表格。 这是非常糟糕的,因为您不能以外键约束不会导致问题的方式来sorting数据。 这只是迫使你去完全把它们关掉的麻烦。 这也浪费了时间,使你的junit基类膨胀,包括禁用外键约束的代码。 您可能需要testing数据库types(hsqldb等),并以特定于数据库的方式禁用它们。 这太糟糕了。 如果dbunit帮助自动禁用外键约束作为其框架的一部分,可能会更好,但是他们不这样做。 他们确实跟踪方言…为什么不使用它们呢? 最终,所有这一切都迫使程序员浪费时间,而不是迅速起床和testing。 3)XML是一个写作的痛苦。 我不必多说这个。 他们还提供了很多方法来做到这一点,我认为这只是使问题复杂化。 只要提供一个真正坚实的方法,并完成它。 4)当你的数据变大时,跟踪ID和他们一致/正确的关系是一个皇家的痛苦。 另外,如果你不在一个月的项目上工作,你怎么记得user_id 1是一个pipe理员,user_id 2是一个商业用户,user_id 3是一个工程师和user_id 4是别的东西? 回去检查这是浪费更多的时间。 应该有一个有意义的方式来检索它以外的任意数字。 5)速度很慢。 我发现,除非使用hsqldb,否则会很痛苦。 它不一定是。 还有很多方法搞砸了它的configuration,因为“开箱即用”并不容易。 有一个驼峰,你必须经过正确的工作。 所有这一切都鼓励人们不要使用它,或者当它们开始使用它的时候被激怒。 6)有些价值倾向于重复,喜欢date。 指定默认值,或者甚至让框架自动设置默认值,即使没有告诉它把默认值放在那里,也不错。 这样你就可以用你想要的值创build对象,并把其余的closures。 如果不需要,这肯定会指定列的每个angular落和裂缝。 7)可能最令人讨厌的是第一个条目必须包含所有的值 – 甚至是空的占位符 – 或者将来的行不会select你实际指定的列。 对于将[NULL]转换为实际的null值,DBunit没有合理的默认值。 你必须手动添加它。 告诉我,谁没有用dbunit做到这一点? 每个人都有。 它不应该是这样的! 这意味着如果你有一个多态的对象,你必须把所有的外键声明为第一行每个子类的连接表,尽pipe它们是空的。 如果你为所有的子types做一个表,你仍然需要指定第一行的所有字段。 这太糟糕了。 为了满足我的需求,还是应该成为更好的数据库testing框架的下一个框架开发人员?

计算列表的移动平均数

这个周末我决定尝试一下Scala和Clojure。 我精通面向对象的编程,所以Scala很容易被用作语言,但是想要尝试函数式编程。 这是困难的地方。 我似乎无法将自己的头脑变成一种写作function的模式。 作为一个专业的function程序员,你如何解决一个问题? 给定一个值列表和一个确定的求和时间段,你将如何生成一个新的列表中的简单移动平均值? 例如:给定列表values (2.0,4.0,7.0,6.0,3.0,8.0,12.0,9.0,4.0,1.0)和period 4,函数应返回:(0.0,0.0,0.0,4.75,5.0, 6.0,7.25,8.0,8.25,6.5) 花了一天的时间仔细研究之后,我可以在Scala中得到最好的结果是: def simpleMovingAverage(values: List[Double], period: Int): List[Double] = { (for (i <- 1 to values.length) yield if (i < period) 0.00 else values.slice(i – period, i).reduceLeft(_ + _) / period).toList } 我知道这是非常低效的,我宁愿做一些事情: where n < period: ma(n) = 0 where n = period: ma(n) = […]

有一个斯卡拉身份识别function吗?

如果我有一个像List[Option[A]] ,我想把它转换成List[A] ,标准的方法是使用flatMap : scala> val l = List(Some("Hello"), None, Some("World")) l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World)) scala> l.flatMap( o => o) res0: List[java.lang.String] = List(Hello, World) 现在o => o只是一个身份函数。 我本来以为会有办法做的: l.flatMap(Identity) //return a List[String] 但是,我无法得到这个工作,因为你不能生成一个object 。 我尝试了一些东西没有用。 有没有人有这样的工作?

何时以及为什么要在Scala中使用Applicative Functor

我知道Monad可以在Scala中表示如下: trait Monad[F[_]] { def flatMap[A, B](f: A => F[B]): F[A] => F[B] } 我明白为什么它是有用的。 例如,给出两个function: getUserById(userId: Int): Option[User] = … getPhone(user: User): Option[Phone] = … 我可以很容易地写函数getPhoneByUserId(userId: Int)因为Option是一个monad: def getPhoneByUserId(userId: Int): Option[Phone] = getUserById(userId).flatMap(user => getPhone(user)) … 现在我在Scala中看到Applicative Functor : trait Applicative[F[_]] { def apply[A, B](f: F[A => B]): F[A] => F[B] } 我不知道什么时候该用它来代替 monad。 […]