Questions tagged «scala»

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

5
Groovy会消失吗?[关闭]
我相信这个问题已经被问过很多次了。但是,我想再次问一下这些语言的未来。 我最初被介绍给Groovy,并真的很喜欢它。我觉得语法更简单,并且更接近Java,并且能够快速学习Grails。 然后是Scala,并且网络框架工作为Lift。我仍在学习Scala,有时发现语法很困难。 但是,我仍然想知道Groovy的未来是什么。当Groovy的作者说如果他对Scala 有所了解,他永远也不会创造出Groovy,那让我想知道是否还有未来。当然,Groovy已经走了很长一段路,如今许多大公司都在使用Grails。 如果今天要看Grails vs Lift,那么Grails无疑是赢家。更多的公司正在使用它。但是,鉴于到目前为止我所说的一切,我很想知道是否应该投资Groovy?Groovy离开了,Scala是更好的选择吗?如果宝马首席执行官说他驾驶梅赛德斯,那么人们会想知道我们为什么不也都驾驶梅赛德斯吧? (我知道这个问题是否真的很广泛并且可能是封闭的。但是我希望将其设为对其他人开放的Wiki。)
30 java  scala  groovy  grails 

8
例如,对于大型Web应用程序,在现实世界中使用“强”类型系统吗?
我知道这是一个非常广泛,模棱两可甚至是哲学上的问题。在某种程度上,问题中最重要的关键字-“强”类型系统-本身定义不正确。所以,让我尝试解释我的意思。 问题的总体背景 我们已经在Ruby on Rails中构建了一个非常大型的Web应用程序,并且总体上我们对我们的堆栈感到满意。如果需要的话,我们可以非常快速地发货-可以在90%的“业务”案例中使用,而不必担心10%的边缘案例。另一方面,借助代码审查和测试覆盖率,我们可以缓慢而谨慎地进行,并确保覆盖所有基础-再次,仅在需要进行更仔细检查和安全的情况下。 但是,随着团队的壮大,我开始感到不舒服,因为缺少直接放入我们堆栈中的“安全网”。 我们最近开始在Java上进行一些本机Android开发。我(愉快地)想起了编译/静态/强类型语言提供的安全性。 IDE本身会捕获错误拼写的变量,错误的数据类型,错误的函数调用以及许多琐碎的错误。全部是因为IDE可以挂接到编译器并验证程序“正确性”的某些方面。 是否需要更改功能签名?简单。编译器+ IDE可以帮助您发现所有调用站点。 是否需要确保始终处理某些异常?已检查的救援例外情况。 现在,尽管这些安全功能各有优点,但我也很清楚它们的缺点。更重要的是,在“繁重的” Java世界中。因此,代替Java,我开始研究人们近来开始使用的大量现代“强类型”语言。例如:Scala,Rust,Haskell等。我最感兴趣的是它们的类型系统和静态/编译时检查的功能。 现在,问题 如何在大型应用程序中使用这些功能强大的类型系统和静态/编译时功能? 例如,对于这些强大的功能,我将如何超越标准的“ hello world”介绍?使用富类型系统来建模业务域问题的模型吗?当您位于30,000 LOC +区域中时,类型系统会帮助还是阻碍?当您的系统与弱类型的外部环境交互时,这些类型的系统(和编译时检查)所提供的安全网会如何处理?通过JSON或XML API,各种数据存储,用户输入等。

9
为什么Scala没有用C或C ++实现
有人知道为什么Scala是用Java和.NET而不是C或C ++实现的吗?大多数语言都是用Cor C ++实现的(例如Erlang,Python,PHP,Ruby,Perl)。除了允许访问Java和.NET库之外,用Java和.NET实现的Scala的优点是什么? 更新 如果用C来实现,Scala不会获得更多好处,因为它可以进行更好的调整而不是依赖JVM?
28 java  c++  .net  c  scala 

6
为什么这些尝试用Xtend和Kotlin浇灌Scala?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 因此,现在Eclipse提供了Xtend,而JetBrains提供了Kotlin-两者似乎都是Scala的简化版本。我的问题是为什么?我已经使用Scala打了一下,这不是说很难。这仅仅是对从命令式转换为功能性转换的固有困难的反应,还是在这里还有其他工作? 编辑:道歉。重读我最初发布的问题,我可以看到听起来像是在拖钓。我说问题的方式似乎是提出问题的最佳方法。我看到过这样的博客帖子:“ Scala太难/ Scala太复杂”,还有“ Kotlin尝试做Scala但更简单”。我将保留原来的措词,但老实说我并没有试图拖钓。

5
一个实例可以等于某个更特定类型的其他实例吗?
我读过这篇文章:如何用Java编写平等方法。 基本上,它为支持继承的equals()方法提供了一种解决方案: Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true 但这是个好主意吗?这两个实例看起来是相等的,但可能具有两个不同的哈希码。是不是有点不对劲? 我相信这可以通过改用操作数来更好地实现。
25 java  c#  scala  comparison 

2
为什么Scala会返回但没有中断并继续
Scala没有break或continue,因此某些循环行为需要更多的思考。 尽早结束循环需要尾递归,异常或scala.util.control.Breaks(使用异常)。 这样做的理由是,就像一样goto,它们是使流量模糊的流程构造,可以用更好,更令人惊讶的方式来完成。 但似乎可以使用相同的论点return。 为什么斯卡拉故意忽略break和continue,但不return?

8
Scala准备好迎接黄金时间了吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 现在,我已经用Scala做了一些琐碎的事情(我喜欢“ hello world”和人为设计的应用程序!),我不禁要问:。一部分关于支持开发的工具的成熟度,一部分关于通用性。工具集准备好了吗?Scala是否适合在企业/业务应用程序上使用?“您”会在非平凡的项目上使用它吗? 我的一些担忧(可能没有根据)是: IDE和工具集是否像我们开发.net和Java应用程序所需要的那样丰富(与Java的eclipse相比,Scala的eclipse似乎有限)? / CI /测试工具集能够有效处理Scala吗? 如何维护是简洁的代码可以被(鼓励?)写的语言? 是否可以找到具有Scala经验的开发人员? 是否有足够的临界质量来通过在线参考书和比该语言“入门”更多的书来获得帮助? 因此,底线是生态系统是否已经足够成熟,可以立即使用,还是更好地等待它的发展? 编辑:让我们说“非同寻常的”是一个多年,多次发布的10-20个开发人员项目。
22 scala 


3
什么是Scala最好的IDE?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我曾尝试在Netbeans和Eclipse中对Scala进行编程,但这并不是我想要的。在Netbeans中,关于方法名称等的建议不起作用。在Eclipse中,我无法通过按F3进入某些类源。(例如scala列表)。 IntelliJ IDEA中的支持更好吗?是否有其他IDE支持Scala?
20 ide  scala 

2
Scala中的Nothing是其他所有类型的子类型
我正在上马丁·奥德斯基(Martin Odersky)的scala函数编程课程,到目前为止,我已经学到了两件事,但它们没有任何意义: Scala不支持多重继承 Nothing 是其他所有类型的子类型 这两个语句不能同时存在,那么这是如何完成的呢?“其他类型的子类型”到底是什么意思 编辑1 在Scala API中,Nothing其定义为abstract final class Nothing extends Any...那么如何扩展其他类?

10
Java开发人员如何看待Scala?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我注意到IDE的支持远非如此,但该语言本身更清晰地支持函数式编程习惯用法。

1
将Scala函数传递给Java 8方法
以下Scala代码可以正常工作,并且可以传递给需要功能的Java方法。有没有更清洁的方法可以做到这一点?这是我的第一遍: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } 这是我的第二遍-它使用Java-8 Function接口的通用包装器来简化Scala语法: // Note: Function1 is Scala's functional interface, // Function …

3
最快的功能语言
我最近一直在研究函数式编程,尤其是Haskell和F#,而以前更是如此。经过一番探索之后,我找不到比较杰出的功能语言(Scala,F#等)的基准比较。 考虑到它们是混合语言,我知道这对某些语言(Scala出现)不一定是公平的,但我只想知道哪种语言在哪种操作和总体上胜过哪种语言。

4
函数式编程会增加代码的复杂性吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 在过去的一年中,我一直在编写Scala代码(来自Java背景)。我真的很喜欢如何使用val,case类,map / filter / lambda函数,隐式函数和类型推断来创建更简单,更简洁的代码。我主要将其用于基于Akka的应用程序。 今年,我和一个新团队一起在Scala项目中,他们非常喜欢函数式编程。他们大量使用Scalaz,并且代码到处都是应用程序,上下文边界,读取器/写入器/状态monad,甚至是将主要方法“包装”在I / O monad中。他们的理由是,这使编译器在断言代码正确且每个函数都没有副作用的情况下“为我们工作”。 即便如此,从我的角度来看,所有这些语法确实确实妨碍了业务逻辑。例如,可以使用“ MyBusinessObject”类型,也可以使用“ List [MyBusinessObject]”,“ Option [MyBusinessObject]”或“ Future [MyBusinessObject]”类型。它们都有明确的含义和目的。另一方面,代码如下: def method[M[_]: Applicative] = { case (a, b) => (ca[M](a) |@| cb[M](b)) { case t @ (ra, rb) => if (ra.result && rb.result) t.right else t.left } } 它会增加程序的复杂性吗?还是我不习惯这种编程方式?


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.