IntelliJ中的Scala入门
IntelliJ IDE中的Scala入门
创建项目
- 打开IntelliJ并单击File => New => Project
- 在左侧面板中,选择Scala。在右侧面板中,选择IDEA。
- 将项目命名为HelloWorld
- 假设这是您第一次使用IntelliJ创建Scala项目,则需要安装Scala SDK。在Scala SDK字段的右侧,单击“ 创建”按钮。
- 选择最高版本号(例如2.12.2),然后单击“ 下载”。这可能需要几分钟,但后续项目可以使用相同的SDK。
- 创建SDK并返回“新建项目”窗口后,单击“ 完成”。
编写代码
- 在左侧的Project窗格中,右键单击
src
并选择 New => Scala class。 - 命名该类
Hello
并将Kind更改为object
。 - 将类中的代码更改为以下内容:
object Hello extends App {
println("Hello, World!")
}
运行它
- 右键单击
Hello
代码并选择Run'Hello'。 - 你完成了!
尝试使用Scala
Scala Worksheets是一种尝试代码示例的好方法
- 在左侧的项目窗格中,右键单击
src
并选择New => Scala Worksheet。 - 将新的Scala工作表命名为“Mathematician”。
- 在工作表中输入以下代码:
def square(x: Int) = x * x square(2)
当您更改代码时,您会注意到它会在右侧窗格中进行评估。
使用IntelliJ和sbt构建Scala项目
创建项目
- 如果未从命令行创建项目,请打开IntelliJ并选择“创建新项目”
- 在左侧面板中,选择Scala,然后在右侧面板上选择SBT
- 单击下一步
- 将项目命名为“SBTExampleProject”
- 如果已在命令行上创建项目,请打开IntelliJ,选择Import Project并打开项目的
build.sbt
文件 - 确保JDK版本为1.8且SBT版本至少为0.13.13
- 选择“ 使用自动导入”,以便在可用时自动下载依赖项
- 选择完成
了解目录结构
sbt创建了许多目录,一旦开始构建更复杂的项目,这些目录就非常有用。你现在可以忽略它们中的大多数,但是这里可以看到所有内容:
- .idea (IntelliJ files)
- project (plugins and additional settings for sbt)
- src (source files)
- main (application code)
- java (Java source files)
- scala (Scala source files) <-- This is all we need for now
- scala-2.12 (Scala 2.12 specific files)
- test (unit tests)
- target (generated files)
- build.sbt (build definition file for sbt)
编写Scala代码
- 在左侧的“ 项目”面板上,展开
SBTExampleProject
=>src
=>main
- 右键单击
scala
并选择New => Package - 命名包
example
,然后单击“ 确定”。 - 右键单击该包,
example
然后选择New => Scala class。 - 命名该类
Main
并将Kind更改为object
。 - 将类中的代码更改为以下内容:
object Main extends App {
val ages = Seq(42, 75, 29, 64)
println(s"The oldest person is ${ages.max}")
}
注意:IntelliJ有自己的Scala编译器实现,有时你的代码是正确的,即使IntelliJ指示不正确。您始终可以检查sbt是否可以在命令行上运行您的项目。
运行项目
- 从“ 运行”菜单中,选择“ 编辑配置”
- 单击+按钮,然后选择SBT任务。
- 说出来
Run the program
。 - 在“ 任务”字段中,键入
~run
。~
当您将更改保存到项目中的文件时,导致SBT重建并重新运行项目。 - 单击确定。
- 在运行菜单上。单击“运行”“运行程序”。
- 在代码中,更改
75
为61
并在控制台中查看更新的输出。
添加依赖项
稍微改变一下,让我们来看看如何使用已发布的库为我们的应用程序添加额外的功能。
- 打开
build.sbt
并添加以下行:
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.0"
这里libraryDependencies
是一组依赖项,通过使用+=
,我们将scala-parser-combinators依赖项添加到sbt将在启动时获取和获取的依赖项集。现在,在任何Scala文件中,您都可以使用常规导入从scala-parser-combinator导入类,对象等。
您可以在Scaladex(Scala库索引)上找到更多已发布的库 ,您还可以在其中复制上述依赖关系信息以粘贴到您的build.sbt
文件中。
使用ScalaTest在IntelliJ中测试Scala
建立
- 在IntelliJ中创建一个sbt项目。
- 添加ScalaTest依赖项:
- 将ScalaTest依赖项添加到您的
build.sbt
文件:libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test"
- 如果您收到“build.sbt已更改”的通知,请选择自动导入。
- 这两个操作将导致
sbt
下载ScalaTest库。 - 等待
sbt
同步完成; 否则,FunSuite
而且test()
将是无法识别的。
- 将ScalaTest依赖项添加到您的
- 在左侧的项目窗格中,展开
src
=>main
。 - 右键单击
scala
并选择New => Scala class。 - 调用它
CubeCalculator
,将Kind更改为object
,然后单击OK。 - 用以下代码替换代码:
object CubeCalculator extends App {
def cube(x: Int) = {
x * x * x
}
}
创建测试
- 在左侧的项目窗格中,展开
src
=>test
。 - 右键单击
scala
并选择New => Scala class。 - 命名该类
CubeCalculatorTest
,然后单击“ 确定”。 - 用以下代码替换代码:
import org.scalatest.FunSuite class CubeCalculatorTest extends FunSuite {
test("CubeCalculator.cube") {
assert(CubeCalculator.cube(3) === 27)
}
} - 在源代码中,右键单击
CubeCalculatorTest
并选择Run'CubeCalculatorTest'。
理解代码
让我们逐行说明:
class CubeCalculatorTest
意味着我们正在测试对象CubeCalculator
extends FunSuite
让我们使用ScalaTest的FunSuite类的test
功能,例如函数test
是来自FunSuite库的函数,它从函数体中收集断言的结果。"CubeCalculator.cube"
是测试的名称。除了一个约定是“ClassName.methodName”之外,你可以调用它。assert
采用布尔条件并确定测试是通过还是失败。CubeCalculator.cube(3) === 27
检查cube
函数的输出是否确实是27.它===
是ScalaTest的一部分并提供干净的错误消息。
添加另一个测试用例
assert
在第一个检查多维数据集的语句之后添加另一个语句0
。- 右键单击
CubeCalculatorTest
并选择“Run CubeCalculatorTest ” 再次重新运行测试。
IntelliJ中的Scala入门的更多相关文章
- 在Java项目中整合Scala
Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...
- IntelliJ IDEA 安装 Scala 插件
本页面中对在 IntelliJ 中安装 Scala 插件的步骤和方法进行了描述. 需要在 IntelliJ 安装 Scala 插件,你首先需要在你的计算机中安装 IntelliJ .IntelliJ ...
- Scala & IntelliJ IDEA环境搭建升级版:在JAVA中调用Scala的helloworld
--------------------- 前言 --------------------- 项目关系,希望用Spark GraphX做数据分析及图像展示,但前提是得会spark:spark是基于sc ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- IntelliJ IDEA 开发scala
1.下载安装IntelliJ IDEA,并安装scala插件 我下载的是linux的13版本,linux版本是绿色版本,有一个启动的脚本,运行就可以了,也可以在linux建立快捷方式.windows的 ...
- Scala入门 【1】
Scala入门 [1] 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 基础 val定义的为常量,var为变量 val name:Type = ***,变量名后加冒号 ...
- Scala入门(1)Linux下Scala(2.12.1)安装
Scala入门(1)Linux下Scala(2.12.1)安装 一.文件准备 1.1 文件名称 scala-2.12.1.tgz 1.2 下载地址 http://www.scala-lang.org/ ...
- IntelliJ IDEA安装scala插件并创建scala示例
1.http://blog.csdn.net/a2011480169/article/details/52712421 2.http://blog.csdn.net/stark_summer/arti ...
- 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)
在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...
随机推荐
- 自己用C语言写RH850 F1KM serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 手上有块Renesas ...
- Redis实现之对象(三)
集合对象 集合对象的编码可以是intset或者hashtable,intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面.举个栗子,以下代码将创建一个图1-1 ...
- 同步锁之lock
一. synchronized的缺陷 当一个代码块被synchronized修饰时,同时该代码块被一个线程执行,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: ...
- Python-S9——Day84-ORM项目实战之权限、form以及modelform
01 权限菜单显示 02 Django路径的自动添加问题 03 原生form实现增删改查 04 modelform实现增删改查 01 权限菜单显示 1.1 优先查找项目中的templates,如果没有 ...
- 双网卡只有一个能ping通的解决办法
来源:http://blog.csdn.net/centerpoint/article/details/38542719 Linux默认启用了反向路由检查 如果2个网卡在一个Lan里面,那么服务器可能 ...
- SOCK5代理服务器
SOCK5代理服务器 简单介绍下比较好用的代理服务器,在部署过程中在内外网访问,需要切网比较麻烦,所以可以在互联网区部署sock5代理,通过配置代理切换服务器, 比较方便配置,节省时间. 官网: ht ...
- 修改Linux内核参数 减少TIME-WAIT
编辑/etc/sysctl.conf文件 增加 net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle ...
- 低水平选手的自我救赎 (1)CLRS Exercise 16.5-2
题目大意 给定正整数 $n$ 和一个由 $m$ 个正整数构成的可重集合 $A$,满足 $\forall a\in A, a\le n$ 且 $m\le n$ . 定义 $N_t(A) = |\{a\i ...
- POJ 3686 The Windy's(思维+费用流好题)
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5362 Accepted: 2249 Descr ...
- BZOJ1901 Zju2112 Dynamic Rankings 【树状数组套主席树】
题目 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k≤j- ...