文档章节

类和对象之Scala程序

柳哥
 柳哥
发布于 2014/06/05 21:32
字数 863
阅读 136
收藏 1

想要编写能够独立运行的scala程序,就必须创建有main方法(仅带一个参数Array[String],且结果类型为Unit)的单例对象。任何拥有合适签名的main方法的单例对象都可以用来作为程序的入口点。如例:

package scalaTest
object Test4{
    def show(arg:String) = {
        arg + ": text" 
    }
}

package scalaTest
import Test4.show        //相当于java中的静态导入
object Summer{
    def main(args:Array[String]) {
        for(arg <- args) {
            println(show(arg))
        }
    }
}

这里单例对象的名字是Summer。它的main方法有合适的签名,所以可以用作程序入口。
import test4.show是对定义在前面Test4对象中show方法的引用。它允许你在后面的文件里使用方法的简化名(注:这类似于java中的静态导入)。
注意scala的每个源文件都隐含了对包:java.lang、scala,以及单例对象Predef的成员引用。包scala中的Predef对象包含了许多有用的方法。例如,scala源文件中写下println语句,实际调用的是Predef 的println(Predef.println转而调用Console.println,完成真正的工作)。写下assert,实际是在调用Predef.assert。

Scala和java之间有一点不同,java需要你把公共类放在以这个类命名的源文件中,而scala对于源文件的命名没有硬性规定。然而通常情况下如果不是脚本,推荐的风格是像在java里那样按照所包含的类名来命名文件。上例中,Summer.scala都不是脚本,因为它们都以定义结尾。反过来说,脚本必须以结果表达式结束。因此如果你尝试以脚本方式执行Summer.scala,scala解释器将会报错说(scala2.11.7下好像也没有报错!!!!)Summer.scala不是以结果表达式结束的(当然前提是你没有在Summer对象定义之后加上任何你自己的表达式)。正确的做法是,你需要用scala编译器真正地编译这些文件,然后执行输出的类文件

方式一:
使用scala的基本编译器:scalac,输入:

$ scalac Summber.scala

开始编译源文件,不过在编译完成之前或许会稍微停顿一下。这是因为每次编译器启动时,都要花一些时间扫描jar文件内容,并在开始编译你提交的源文件之前完成更多其他的初始化工作。因此,scala的发布包里还包括了一个叫做fsc快速scala编译器,fast scala compiler)的scala编译器后台服务。

方式二:
使用scala的快速编译器(fsc),如下:

$ fsc Summer.scala

第一次执行fsc时,会创建一个绑定在你计算机端口上的本地服务器后台进程。然后它就会把文件列表通过端口发送给后台进程,由后台进程完成编译。下一次执行fsc时,检测到后台进程已经在运行了,于是fsc将只把文件列表发给后台进程,它会立刻开始编译文件。使用fsc,只须在首次运行的时候等待java运行时环境的启动。如果想停止fsc后台进程,可以执行:

fsc  -shutdown

不论执行scalac还是fsc命令,最终都将完成Java类文件的创建,然后可以用scala命令,就像之前的例子里调用解释器那样运行它。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 205
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
Scala学习笔记(5)-类和方法

Scala里的类和方法的概念都是差不多的,这里只列出Scala重要的一些概念: 1.Public是Scala的缺省访问级别,可以省略不写。 2.Scala里方法参数的一个重要特征是它们都是val,不是var(参数是v...

山海经
2013/08/26
0
0
浅谈Scala 2.8的包对象(package object)

Scala 2.8提供包对象(package object)的新特性。什么是包对象呢?按我的理解,根据Scala“一切皆对象”设计哲学,包(package)也是一种对象。既然是对象,那么就应该有属性和方法,也可以在...

mj4738
2011/11/15
0
2
Scala基础语法

Scala 是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库...

岁月留痕
2015/12/08
35
0
[吐槽] scala 编程语言

人在江湖,“肾”不由己。选择哪个开发语言,取决于要完成的任务,比如 要用spark时 可以用java、python,但是scala才是“亲儿子”,所以就用了它了。 scala语言规范.pdf 下载 这里就是简单吐...

___k先生
2017/12/11
0
0
【Scala】Scala高级使用技巧之二

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/82111814 1、重写field的提前定义 默认情况下,如果父类中的构造函数代码,用...

魏晓蕾
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ui2code中的深度学习+传统算法应用

背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意...

阿里云官方博客
36分钟前
2
0
1-2 【包子mysql系列】, 对mysql的innoDB加锁分析

innoDB的事务,是基于锁来实现的,用到事务不自然就会用到锁,而如果对锁理解的不通透,很容易造成线上问题。 数据库加锁的分析,和事务的引擎,隔离级别,索引,主键索引都有关系, 如果去考...

爱吃大肉包
50分钟前
0
0
插入排序

/** * 插入排序 * @Title: insert * @Description: TODO(这里用一句话描述这个方法的作用) * @param 参数 * @return void 返回类型 * @throws */ static void insert(int[] arr ){ for(int i......

yzzzzzzzz
52分钟前
3
0
python Kmeans算法解析

一. 概述 首先需要先介绍一下无监督学习,所谓无监督学习,就是训练样本中的标记信息是位置的,目标是通过对无标记训练样本的学习来揭示数据的内在性质以及规律。通俗得说,就是根据数据的一...

终日而思一
52分钟前
2
0
Nginx+Keepalived实现站点高可用

Nginx+Keepalived实现站点高可用

吴伟祥
53分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部