scala - 如何开始使用 scala

标签 scala jvm

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




我是 .NET 开发人员,我想稍微拓宽我的视野,在检查了现代趋势之后决定尝试 Scala。你能建议一个好的策略来开始它吗?我应该先学习Java吗?我应该阅读什么资料或手册?是否有任何操作系统项目可以练习 Scala 并在其上成长?

谢谢,
多米尼克

最佳答案

您可能会通过访问 Simply Scala 获得第一印象有在线口译员的地方。

绝对经典是Scala for Java Refugees它最初是为来自 Java 的人编写的,但考虑到 C#/Java 的基础知识有多么相似,这对你很有帮助。

您不需要先学习 Java,但您需要安装并运行 Java 运行时/开发工具包。

那就去http://www.scala-lang.org/downloads并为您的操作系统下载适当的软件包(我总是更喜欢 Scala 的夜间构建,它们比最新的稳定版本修复了更多错误)。

之后,运行基本上是“Simply Scala 离线”的 Scala REPL(Simply Scala 也在幕后使用 Scala REPL)。甚至许多 Java 程序员首先使用 Scala REPL 来制作原型(prototype)。

如果你喜欢看书学习我可以推荐Programming in Scala (2nd edition) Martin Odersky (如果您从语言设计的角度出发并想要“引用书”)。还有一些像《Scala 编程》这样的书更适合初学者,但我个人觉得《Scala 编程》非常棒,并且只用那本书就学会了 Scala。

启动 Scala 的一个好方法是使用集合类。 .NET 最近添加了一些与 LINQ 和扩展方法类似的东西,因此很容易为您学习。

一个让你开始的小例子:

//Define a class with some properties
case class Person(name: String, var age: Int, spokenLanguages: String*)

//Create some persons
val joe = Person("Joe", 42, "English","French","Danish")
val doe = Person("Doe", 23, "English","German")
val don = Person("Don", 11, "Italian","French","Polish")
val bob = Person("Bob", 17, "German")

//Access a property
joe.name

//Don had his 12th birthday!
don.age = 12

//Put the persons into a list
val persons = List(joe, doe, don, bob)

//Divide the list into minors and adults
val (minors, adults) = persons.partition(_.age < 18)
//Get the total age of all persons
val personsTotalAge  = persons.map(_.age).sum
//Return a list with only those speaking English
val englishSpeakers  = persons.filter(_.spokenLanguages.contains("English"))
//Same as the example above.
val englishSpeakers2 = 
  for{ person   <- persons
       language <- person.spokenLanguages 
       if language == "English"
  } yield person

我对 C# 不是很流利,但我相信很多事情可能看起来与您相似。

Scala 的 XML 支持的一些示例:
//The shoppingCart for breakfast
val shoppingCart = <list>
                     <item><name>Tomatoes</name><price>0.30</price><amount>4</amount></item>
                     <item><name>Eggs</name><price>0.15</price><amount>10</amount></item>
                     <item><name>Bread</name><price>2.20</price><amount>1</amount></item>
                   </list>

//How much does it cost?
val total = (shoppingCart \ "item").map(i => (i \ "price").text.toDouble * (i \ "amount").text.toDouble).sum

//This is a Symbol
val sym = 'SomeSymbol

//I'm too lazy to use Strings for XML! (Example for implicits)
implicit def symbol2string(symbol: Symbol) = symbol.name

//Now I can use Symbols too!
val total = (shoppingCart \ 'item).map(i => (i \ 'price).text.toDouble * (i \ 'amount).text.toDouble).sum

关于scala - 如何开始使用 scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405872/

相关文章:

scala - 在 Scala 中实现产品类型,并在其各个部分上使用通用更新功能

scala - 如何从 Scala 中的泛型函数返回 null?

scala - 未找到 Intellij Scala 类路径

java - Akka 2.3.6 中缺少 IOManager

java - Java中的内联

json - 使用 Play JSON 的多个写入来呈现对象的不同 View

functional-programming - 寻找基于 YAML 的函数式语言

java - 静态方法和实例方法的内存表示之间的区别

使用的 Java 内存

java - 在同一 JVM 中检测到多个 SparkContext