文档章节

类和对象之Scala程序

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

想要编写能够独立运行的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命令,就像之前的例子里调用解释器那样运行它。

© 著作权归作者所有

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

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

山海经
2013/08/26
0
0
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 2.8的包对象(package object)

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

mj4738
2011/11/15
0
2
Android 手机上的 Scala 编程

在本文中,我们将创建一个在 Android 设备上运行的移动应用程序。您将需要安装 Android SDK;本文使用 V1.5 SDK。应用程序代码将用 Scala 编程语言编写。如果您从来没用过 Scala,那么没有关...

红薯
2009/07/20
2.6K
2
scala语言与java的区别

scala支持关联映射,如可以用(key -> value)表示一个键值对 scala中的所有类型都是对象,包括基本数据类型 scala中的case语句用来判断接收的消息,比java中的switch...case...更专注 receiv...

jhonephone
2014/09/03
0
0
Scala学习笔记(1)-环境搭建

Scala是一种多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。scala可以和java程序无缝拼接,因为scala文件编译后也是成为.class文件,并且在JVM上运行,有下下一代J...

山海经
2013/08/25
0
0
scala 类和对象(翻译自Programming in Scala)

写一个需求复杂的程序,你必须分解这些需求,把他们变成简单的片段。在Scala语言中,程序分解单元的基础就是class。想要控制复杂性,你可以定义需求可控的类。你可以将这些类实例化成对象,并...

崔钢
2010/11/13
597
0
Scala入门-大数据云计算下的开发语言

Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的 面向对象编程语言,而又无缝地结合了命令式编程和 函数式编程风格。Christopher Diggins认为:...

liwei2000
06/30
0
0
Spark入门到精通视频学习资料--第一章、Scala基础与实践

第一章、Scala基础与实践(3讲) Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格...

dongzhumao
2015/02/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

代码生成利器:IDEA 强大的 Live Templates

代码生成利器:IDEA 强大的 Live Templates

qwfys
25分钟前
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
28分钟前
1
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
31分钟前
0
0
日常运维--rsync同步工具

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

chencheng-linux
35分钟前
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
48分钟前
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
1
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
1
0
rsync工具介绍/rsync通过ssh同步

rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

Hi_Yolks
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部