提示:在以下示例中,尝试选择你首选的 Scala 版本。
你的第一个 Scala 程序
Scala 的“Hello, World!”示例如下。首先,将此代码放入名为 hello.scala 的文件中
object hello {
def main(args: Array[String]) = {
println("Hello, World!")
}
}
在此代码中,我们在一个名为
hello
的 Scalaobject
中定义了一个名为main
的方法。Scala 中的object
类似于class
,但定义了一个单例实例,你可以四处传递它。main
接受一个名为args
的输入参数,该参数必须键入为Array[String]
,(现在忽略args
)。
@main def hello() = println("Hello, World!")
在此代码中,
hello
是一个方法。它使用def
定义,并使用@main
注释声明为“main”方法。它使用println
方法将"Hello, World!"
字符串打印到标准输出 (STDOUT)。
接下来,使用 scalac
编译代码
$ scalac hello.scala
如果你从 Java 转到 Scala,scalac
就如同 javac
,因此该命令会创建多个文件
$ ls -1
hello$.class
hello.class
hello.scala
$ ls -1
hello$package$.class
hello$package.class
hello$package.tasty
hello.scala
hello.class
hello.tasty
与 Java 一样,.class 文件是字节码文件,它们已准备好可在 JVM 中运行。
现在,你可以使用 scala
命令运行 hello
方法
$ scala hello
Hello, World!
假设这样做成功了,恭喜你,你刚刚编译并运行了你的第一个 Scala 应用程序。
有关 sbt 和其他使 Scala 开发更简单的工具的更多信息,请参阅 Scala 工具 章节。
询问用户输入
在我们的下一个示例中,在向用户问好之前,我们先询问用户的姓名!
有几种方法可以从命令行读取输入,但一种简单的方法是使用 scala.io.StdIn 对象中的 readLine
方法。要使用它,您需要首先导入它,如下所示
import scala.io.StdIn.readLine
为了演示其工作原理,我们创建一个小的示例。将此源代码放入名为 helloInteractive.scala 的文件中
import scala.io.StdIn.readLine
object helloInteractive {
def main(args: Array[String]) = {
println("Please enter your name:")
val name = readLine()
println("Hello, " + name + "!")
}
}
import scala.io.StdIn.readLine
@main def helloInteractive() =
println("Please enter your name:")
val name = readLine()
println("Hello, " + name + "!")
在此代码中,我们将 readLine
的结果保存到名为 name
的变量中,然后使用字符串上的 +
运算符将 "Hello, "
与 name
和 "!"
连接起来,形成一个单独的字符串值。
您可以通过阅读 变量和数据类型 了解有关使用
val
的更多信息。
然后使用 scalac
编译代码
$ scalac helloInteractive.scala
然后使用 scala helloInteractive
运行它,这次程序在询问您的姓名后将暂停,并等到您键入姓名并在键盘上按回车,如下所示
$ scala helloInteractive
Please enter your name:
▌
当您在提示符处输入您的姓名时,最终交互应如下所示
$ scala helloInteractive
Please enter your name:
Alvin Alexander
Hello, Alvin Alexander!
有关导入的说明
正如您在此应用程序中看到的那样,有时某些方法或我们稍后将看到的其他类型的定义不可用,除非您使用 import
子句,如下所示
import scala.io.StdIn.readLine
导入可以通过以下几种方式帮助您编写代码
- 您可以将代码放入多个文件中,以避免杂乱,并帮助浏览大型项目。
- 您可以使用代码库,可能是由其他人编写的,它具有有用的功能
- 您可以知道某个定义来自哪里(特别是如果它不是在当前文件中编写的)。
此页面的贡献者
目录
- 简介
- Scala 特性
- 为何选择 Scala 3?
- Scala 尝鲜
- 你好,世界!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一等函数
- 单例对象
- 集合
- 上下文抽象
- 顶级定义
- 总结
- 初探类型
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 展开
- 高阶函数
- 编写自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数即值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 交集类型
- 并集类型
- 代数数据类型
- 协变
- 不透明类型
- 结构类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文界限
- 给定导入
- 类型类
- 多重相等性
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发者的 Scala
- 面向 JavaScript 开发者的 Scala
- 面向 Python 开发者的 Scala
- 下一步