Scala 学习记录(一)
1. 相对于java,scala的值修饰用val,变量修饰用var.值相当于java的final 修饰了。
- package demo
- object ScalaBase extends App {
- println(1)
- println(1 + 1)
- println("Hello!")
- println("Hello," + " World!")
- /**
- * val 是值得修饰符,相当于java的final int x;
- * scala 可以不指名类型
- */
- val x = 1 + 1
- println(x)
- ///x =2 //不编译的
- //指明类型可以如下写
- val x1 : Int = 1 + 1
- println(x1)
- /**
- * var 是变量修饰符,相当于java int x2,不加final修饰
- */
- var x2 = 1 + 1
- x2 = 3
- println(x2 * x2)
- /**
- * scala 是个万能表达式语言,比如可以通过{}组合表达式
- */
- println({
- val x = 1 + 1
- x + 1
- })
- println({
- val x = "test " + "scala "
- x + "demo!"
- })
- /**
- * scala相对于java 方法定义,分为函数和方法
- * 函数是带参数的表达式,也就是相对于java8的匿名方法()->{}
- * (int x, int y) ->{}
- * 左边是参数,右边是表达式
- */
- (x: Int) => x + 1
- val addOne = (x: Int) => x + 1
- println(addOne(1))
- val add = (x: Int,y: Int) => x + y
- println(add(1,2))
- val getTheAnswer = () => 42
- println(getTheAnswer())
- /**
- * def 是方法关键字
- * def 后面是方法名
- * 与java不同的是,scala的返回类型是写在: Int
- * =后面就是方法体
- * 类似于java的 public int addMethod(int x, int y) {return x + y}
- * 注意:scala虽然有return保留字,一般都不用,scala用最后一行进行返回
- * @param x
- * @param y
- * @return
- */
- def addMethod (x: Int, y: Int): Int = x + y
- println(addMethod(1, 2))
- /**
- * 方法可以有多个参数
- * 相对于java,scala有多个参数类别,不用定义在同一()里面,比较明显表明表达式结构
- */
- def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = {
- (x + y) * multiplier
- }
- /**
- * 当然scala也可以没有参数
- */
- def name: String = System.getProperty("name")
- println("Hello, " + name + "!")
- /**
- * scala 可以用{}使用多行表达式
- */
- def getSquareString(input: Double): String = {
- val square = input * input
- square.toString
- }
- println(getSquareString(2.22))
- /**
- * 类跟Java一样都是用class 关键字
- * 不同的是scala的参数可以定义在()里面
- * 类似于Java的构造函数
- * 相对于java用void表示没有返回值,scala用 Unit
- */
- class Greeter(prefix: String, suffix: String) {
- def greet(name: String): Unit = println(prefix + name + suffix)
- }
- /**
- * scala 同样使用new 作为创建实例的关键字
- */
- val greeter = new Greeter("Hello,","!")
- greeter.greet("Scala developer")
- /**
- * case class 是一个非常特殊的类,它可以用于模式匹配
- * case class 可以不用new关键字
- * 它是一个public类
- * 它自动生成hashCode 、equals
- */
- case class Point(x: Int,y: Int)
- val point = Point(1, 2)
- val anotherPoint = Point(1, 2)
- val yetAnotherPoint = Point(2, 2)
- if (point == anotherPoint) {
- println(point + " and " + anotherPoint + " are the same.")
- } else {
- println(point + " and " + anotherPoint + " are different.")
- }
- // Point(1,2) and Point(1,2) are the same.
- if (point == yetAnotherPoint) {
- println(point + " and " + yetAnotherPoint + " are the same.")
- } else {
- println(point + " and " + yetAnotherPoint + " are different.")
- }
- /**
- * Objects 是一个单例,不能用new
- * 就像Java定义单例模式一样,它只有一个
- */
- object IdFactory {
- private var counter = 0
- def create(): Int = {
- counter += 1
- counter
- }
- }
- val newId: Int = IdFactory.create()
- println(newId)
- val newerId: Int = IdFactory.create()
- println(newerId)
- /**
- * Traits 类似于Java的Interface,只不过Traits可以部分实现
- * Java 只能通过default 进行部分实现,实现包内访问
- * trait 只用extends修饰,到不用实现
- */
- trait GreeterTrait {
- def greet(name: String): Unit
- def greetDefault(name: String): Unit =
- println("Hello, " + name + "!")
- }
- class DefaultGreeterTrait extends GreeterTrait {
- override def greet(name: String): Unit = {
- println()
- }
- }
- class CustomizableGreeter(prefix: String, postfix: String) extends GreeterTrait {
- override def greet(name: String): Unit = {
- println(prefix + name + postfix)
- }
- }
- val greeterTrait = new DefaultGreeterTrait()
- greeterTrait.greet("Scala developer")
- val customizableGreeter = new CustomizableGreeter("How are you","?")
- customizableGreeter.greet("Scala developer")
- /**
- * scala 是运行与jvm,因此也需要一个主要方法main,main也是一个字符串数组
- */
- }
- object ScalaMain {
- def main(args: Array[String]): Unit =
- println("Hello, Scala developer!")
- }
Scala 学习记录(一)的更多相关文章
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
随机推荐
- YTU 2417: C语言习题 字符串长度
2417: C语言习题 字符串长度 时间限制: 1 Sec 内存限制: 128 MB 提交: 758 解决: 548 题目描述 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长 ...
- stringBuffer、StringBuilder、排序、Arrays、Jdk1.5新特性(java基础知识十三)
1.StringBuffer类的概述 * A:StringBuffer类概述 * 通过JDK提供的API,查看StringBuffer类的说明 * 1.线程安全的可变字符序列. * 2.可将字符串缓冲 ...
- JavaScript实现Map、Reduce和Filter
1. [代码][JavaScript]代码 <script type="text/javascript">// 函数式编程:// 描述我们要做什么,而不是我们如 ...
- 两次跳转后session丢失
public ActionResult index() { Session["a"] = "aaa"; System.Web.HttpContext.Curre ...
- Linux下使用pip安装keras
Keras是一个底层使用Theano或TensorFlow的深度学习框架,它的设计参考了Torch,用Python语言编写,也很方便使用Python调用,是一个高度模块化的神经网络库,支持使用GPU和 ...
- 「网络流24题」「LuoguP4014」 分配问题
Description 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为 cij.试设计一个将 n 件工作分配给 n 个人做的分配方案,使产生的总效益最大. Input 文 ...
- Code-NFine:下来框和复选框
ylbtech-Code-NFine:下来框和复选框 1.返回顶部 1. 1.1 html $("#F_OrganizeId").bindSelect({ url: "/ ...
- Button Style
Button Style BS_3STATE 与复选框一样本样式按钮可被单击变暗.变暗状态通常用于指示本样式的按键正处于禁用状态. BS_AUTO3STATE 与三状态的复选框一样当用户选中它本按钮样 ...
- class.forName()和.class有什么区别?
class.forName()会初始化类的成员(静态的),最先加载的是类的静态成员变量,然后是静态代码块. 访问常量并不会导致类的初始化,但是访问静态成员会.
- Eclipse中,Open Type(Ctrl+Shift+T)失效后做法。
好几天ctrl shift T都不好用了,一直认为是工程的问题,没太在意,反正ctrl shift R也可也,今天看同事的好用,于是到网上查了一下解决的方法,刚才试了一下,应该是这个问题,明天就去公司 ...