Questions tagged «scala»

Scala是一种主要用于Java虚拟机的通用编程语言。它旨在以简洁,优雅和类型安全的方式表达常见的编程模式,它融合了命令式和功能性编程风格。

2
在没有Java经验的情况下,使用Scala构建Android应用的理想学习路径是什么?
不幸的是,目前没有关于“使用Scala学习Android开发”这一主题的书籍,这将是理想的解决方案。我猜想我至少需要在这里拿起3本书,每个主题一本书。但是,我不知道以什么顺序阅读它们,是否同时阅读它们,可以安全地跳过Java书的哪些部分等等。 对我而言,开始使用Scala构建Android应用的最佳途径是什么?
13 java  android  scala 

1
将Grails应用程序迁移到Scala Play / Spray
我们有一个中等大小的Grails Web应用程序,它在PostgreSQL和使用HTML的GSP上使用GORM / Hibernate,还提供了一些REST API。我们正在对Scala进行标准化,并希望将此应用程序迁移到Play或Spray,并使用Slick访问现有数据库。 Nimble当前用于身份验证/授权和用户/角色/等。管理。 为了逐步进行迁移,避免大规模迁移,我们可以采取哪些方法? 它们都是JVM语言,有没有办法避免将它们当作独立的Web应用程序在独立的端口上运行?

3
什么是“解除代表权”?
只是在这里遇到了这个词: http://www.codemesh.io/codemesh2014/viktor-klang “我们将演示Flow API(提升的表示形式),以及将提升的表示形式转换为执行表示形式的可插入方式-Flow Materialization。” 谷歌搜索没有太大帮助。

1
Clojure与Scala中的模式匹配
这两种语言的模式匹配之间的主要区别是什么?我不是在指语法,而是功能,实现细节,用例范围和必要性。 Scala应用程序(例如Lift和Play)自豪地谈到了语言模式匹配能力。另一方面,Clojure具有一个库core.match,并内置了解构功能,该功能似乎也很强大。 *注:之所以被问到这个问题,是因为我看到了一篇博客文章,其中的一个程序员作为实验,使用Scala和Clojure构建了一个Lisp解释器。他说,克洛瑞尔(Clojure)比赛在经过一定长度后就中断了,但无法解释原因,但我真的很想知道。您可以在以下位置找到此帖子:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

5
为什么Scala比其他语言更具可扩展性?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 Scala被称为可扩展语言,该功能甚至包括在其名称中: Scala这个名字是“可扩展”和“语言”的缩写,表示它旨在根据用户的需求进行扩展。 在Scala中,“可伸缩”是什么意思?是什么使Scala比Java更具可扩展性?

2
Scala中缀表示法
是否可以使用中缀符号来调用方法? 例如,在Haskell中,我可以编写以下函数: x `isAFactorOf` y = x % y == 0 然后像这样使用它: if 2 `isAFactorOf` 10 ... 在某些情况下,这允许非常可读的代码。在Scala中可能有与此类似的东西吗?我搜索了“ Scala中缀表示法”,但是该术语似乎在Scala中表示不同的含义。
12 scala 


2
Java的新发展将如何影响其与Scala和Clojure等语言的互操作性?
据我了解,Scala和Clojure都被设计为新的语言, 取决于JVM,并且 从某种意义上说,它们可以轻松地与Java代码集成,因为它们允许在Scala和Clojure代码中使用Java类。 从Java 8开始(或者在后续的Java版本中可能更强大),Java语言的语义将发生变化。 我想问一下这些变化将如何影响Java与Scala / Clojure之间的互操作性,以及将会带来什么后果。例如,由于Java 8中的lambda不是对象(请参见here),所以Scala和Clojure可能必须处理不是对象的Java值。这会是个问题吗? 我可以想到以下情形: Scala或Clojure语言将得到扩展,以适应新的Java语义(以处理新的非对象值)并支持与Java的互操作性。 Scala或Clojure语言将不会扩展。仅当新的Java功能(例如函数值)可以映射到现有概念时,这才有可能。例如,在Scala中,甚至函数都是对象,因此我猜Java函数在对Scala可见时会再次被包装到某种对象中。 Scala或Clojure语言将继续支持直至Java 6或7的互操作性,而无需关注Java的最新发展。这将要求仍旧支持Java的较早版本(至少由OpenJDK或其他项目支持),以便这些语言可以基于Java的更为保守/稳定的分支。 总结:我们可以期望Java的未来发展会对Scala和Clojure等语言产生影响,以保持与Java的互操作性吗?已经有一些(链接到)有关此主题的正在进行的讨论吗? 注意 我可以想象Scala,Clojure和其他基于JVM的语言在将其实现更新到较新版本的JVM时不会有任何重大问题(并且新的JVM功能将使此实现更加容易)。我的问题集中在Java语言的功能以及其他JVM语言是否能够/如何“看到” /使用这些新功能,而不是基于JVM的语言是否可以在最新的JVM上运行。
11 java  scala  clojure 

1
为什么Scala要求函数具有显式的返回类型?
我最近开始学习在Scala编程,到目前为止,它很有趣。我真的很喜欢在另一个函数中声明函数的功能,这似乎很直观。 关于Scala的一个烦恼是,Scala在其函数中需要显式的返回类型。而且我觉得这阻碍了语言的表达能力。同样,很难用该要求进行编程。也许是因为我来自Javascript和Ruby舒适区。但是对于像Scala这样在应用程序中具有成千上万个连接函数的语言,我无法想象如何头脑风暴,确切地讲出我正在编写的特定函数应该在递归之后返回的类型。 对于函数的显式返回类型声明的这种要求,对于像Java和C ++这样的语言,请不要打扰我。Java和C ++中的递归发生时,通常最多要处理2到3个函数。从来没有像Scala这样将多个功能链接在一起。 因此,我想我想知道是否有充分的理由解释为什么Scala应该要求具有显式返回类型的函数?

3
Scala或Clojure函数式编程最佳实践
我做了很多自学编码,并获得了并行编程模型的经验:Actor,软件事务存储,数据流。 当我尝试将这些体系结构应用于现实生活时(应用于高负载Web应用程序中),任何模型都不支持数据的持久性和持久性。现实生活中的任务需要最后保存数据。这意味着我仍然必须使用数据库并捕获数据库同步,可能的可伸缩性瓶颈等。 有谁知道使用Akka Actor 或软件事务存储器并最终实现持久性的体系结构(src或文本,图表或蓝图)的好例子吗? 欢迎在现实生活中使用事务处理内存,参与者,数据流,元组空间的任何好的示例/想法。

4
使用“混合”语言进行设计:面向对象的设计还是功能编程?
在过去的几年中,我喜欢使用的语言变得越来越“实用”。我现在使用的是一种“混合”语言:C#,F#,Scala。我喜欢使用与域对象相对应的类来设计我的应用程序,并使用使编码更容易,更简洁和更安全的功能功能(尤其是对集合进行操作或传递函数时)。 但是,当涉及到设计模式时,这两个世界会“冲突”。我最近遇到的特定示例是观察者模式。我希望生产者在创建或更改项目时通知其他一些代码(“消费者/观察员”,例如数据库存储,记录器等)。 我最初是这样“功能性地”完成的: producer.foo(item => { updateItemInDb(item); insertLog(item) }) // calls the function passed as argument as an item is processed 但是我现在想知道是否应该使用更多的“ OO”方法: interface IItemObserver { onNotify(Item) } class DBObserver : IItemObserver ... class LogObserver: IItemObserver ... producer.addObserver(new DBObserver) producer.addObserver(new LogObserver) producer.foo() //calls observer in a loop 两种方法的优缺点是什么?我曾经听过一位FP专家说,那里的设计模式仅是由于语言的局限性,这就是为什么功能语言很少的原因。也许这可能是一个例子? 编辑:在我的特定情况下,我不需要它,但是..您将如何以功能方式实现“观察者”的删除和添加?(即,您将如何实现模式中的所有功能?)例如,仅传递一个新函数?

3
使用Scala和LWJGL的简化游戏的函数式编程方法
我是一名Java命令程序员,我想了解如何基于功能性编程设计原则(特别是引用透明性)生成简单版本的Space Invaders。但是,每当我尝试考虑一种设计时,我都会迷失在极端可变性的泥潭中,而这种可变性是函数式编程纯粹主义者所避免的。 为了学习函数式编程,我决定尝试使用LWJGL在Scala中创建一个非常简单的2D交互式游戏Space Invader(注意缺少复数形式)。以下是基本游戏的要求: 用户在屏幕底部分别通过“ A”和“ D”键向左和向右移动 用户发射的子弹由空格键直接向上发射,两次射击之间的最小间隔为0.5秒 两次射击之间的随机时间为0.5到1.5秒,直接发射外星飞弹 在原始游戏中故意遗漏的是WxH外星人,可降解的防御屏障x3,屏幕顶部的高速飞碟船。 好的,现在到实际的问题域。对我来说,所有确定性部分都是显而易见的。那些不确定的部分似乎阻碍了我思考方法的能力。确定性部分是子弹一旦存在的轨迹,外星人的连续运动以及由于击中玩家的船或外星人(或两者)而引起的爆炸。对我来说,不确定的部分正在处理用户输入流,处理用于确定外来子弹射击的随机值以及处理输出(图形和声音)。 这些年来,我可以做(并且已经做过很多)这类游戏。但是,所有这些都来自命令式范式。而且LWJGL甚至提供了一个非常简单的Java版的“太空侵略者”(我开始使用Scala作为Java(不带分号)将其迁移到Scala)。 以下是围绕该领域讨论的一些链接,似乎没有一个人以Java / Imperative编程人员会理解的方式直接处理这些想法: 纯功能复古游戏,第1部分,詹姆斯·海格(James Hague) 类似的堆栈溢出帖子 Clojure / Lisp游戏 Haskell游戏堆栈溢出 Yampa(在Haskell中)功能响应式编程 It appears that there are some ideas in the Clojure/Lisp and Haskell games (with source). Unfortunately, I am not able to read/interpret the code into mental models …

4
Scala代替Java是一个不错的选择吗?
我们将开始一个新项目,其中将培训所有使用Java(frameworks / ECO system等)的.net开发人员。我们有很多用C#编写的代码,似乎所有这些都将浪费掉,因为我们必须用Java重新编写所有代码。我看到的问题是,大约第一年(可能是两年),我们将无法交付任何东西,因为我们将大部分时间用于重现Java以前但现在的内容。 由于我们的团队分布在世界各地的不同办公室,并且我们有大量的Java开发人员(20至30名)和10位使用.net的开发人员,因此我们希望让所有开发人员都使用相同的语言/平台,以便我们开始重用组件/模块。所以我可以理解管理层的观点。 昨天我遇到了Scala,并想知道将它与当前产品(用C#编写)一起使用是否会更好,然后至少一年后我们将有一个有效的产品。同样在一年中,我们在迁移产品的其他部分时可以在Java世界中使用这些模块。 考虑到我们要实现的目标,Scala是比Java更好的选择吗?
11 java  c#  scala 

2
为什么Scala编译器不能为未密封的类/特征给出模式匹配警告?
如果我使用未密封的trait或abstract class在Scala中使用模式匹配,我想知道,编译器是否不知道在编译时针对该特定模式匹配,可以使用此特性/类的哪些可能的实现?所以,如果这样做,会不给模式匹配的警告,即使是在trait/ abstract class不密封,因为他知道哪些类型可以被使用,通过检查所有可能的依赖性/进口? 例如,如果我有一个,Option[A]并且我只为Some[A]但不为进行模式匹配None,则编译器会抱怨,因为Option是密封的。 如果编译器无法知道/解决该问题,那为什么不呢?如果编译器(理论上)可以做到这一点,那么在Scala中不使用它的原因是什么?还有其他支持这种行为的语言吗?

2
Scala中的无参数和Empty-Paren方法
目前,我正在通过Odersky的Programming Scala(第二名)来学习Scala。我到了第10章,他开始介绍无参数和空变量方法。我只是无法理解。 到目前为止,我所了解的是,如果一种方法具有副作用,则应该使用空括号,否则应使用无参数方法。 我不知道此约定的优点是什么。我在Stack Exchange上阅读了这些帖子,但是老实说,当这些帖子开始深入讨论该主题时,我迷失了。 我正在寻找有关此语言功能的典型用例以及可以帮助我更好地理解它的优点的简单解释。
10 scala 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.