【scala初学】scala symbol 符号 -3

前面接触了scala符号,这会整体性的说说。

scala符号主要分为四类:
 1. 关键字,保留字 (Keywords/reserved symbols)

2. 自动导入 (Automatically imported methods)

3. 常用方法 (Common methods)

4. 语法糖(Syntactic sugars)

前两章主要讲到了
1.关键字

2.常用方法

这章补充 自动导入,和语法糖

自动导入

任何scala代码中都自动导入了如下:

//顺序无关
import java.lang._
import scala._
import scala.Predef._

主要看第三行  Predef

他包含了所有的隐士转换和方法导入

http://www.scala-lang.org/api/current/index.html#scala.Predef$

如:<:<

sealed abstract  class  <:<[-From, +To] extends (From)  To with Serializable
An instance of A <:< B witnesses that A is a subtype of B.

又如: =:=

sealed abstract  class  =:=[From, To] extends (From)  To with Serializable
An instance of A =:= B witnesses that the types A and B are equal.

我们能够看到更多的导入符号在index 复制如下:

http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#index.index-_

语法糖

对于老程序员Syntactic sugars是个很有意思的东西,但是对于新人来说,第一概念陌生,第二不会用,反而更加容易晕头转向。

我们先了解下传统意义上对Syntactic sugars理解: 隐藏更多细节让代码便于使用

那我们看看scala 如何官方用代码做一次语法糖

class Example(arr: Array[Int] = Array.fill(5)(0)) {
def apply(n: Int) = arr(n)
def update(n: Int, v: Int) = arr(n) = v
def a = arr(0); def a_=(v: Int) = arr(0) = v
def b = arr(1); def b_=(v: Int) = arr(1) = v
def c = arr(2); def c_=(v: Int) = arr(2) = v
def d = arr(3); def d_=(v: Int) = arr(3) = v
def e = arr(4); def e_=(v: Int) = arr(4) = v
def +(v: Int) = new Example(arr map (_ + v))
def unapply(n: Int) = if (arr.indices contains n) Some(arr(n)) else None
}
 
var ex = new Example
println(ex(0)) // calls apply(0)
ex(0) = 2 // 更新数组的第一个值为2 原官方解释有误 
ex.b = 3 // calls b_=(3)
val ex(c) = 2 // calls unapply(2) and assigns result to c
ex += 1 // substituted for ex = ex + 1

先适应下scala的语法 如:

 def a_=(v: Int) = arr(0) = v

实际上 a_= 是方法名, 第二个= 号 是指后面即将跟上方法体, arr(0) = v是方法

def a_= (v: Int) = {    
 arr(0) = v 
}

我们可以把ex简单的得到一些值理解为对一种Syntactic sugars

让我们看看官方给出的2个常见例子:

++=
||=

而实际上++= index 中已经给出,并且在多个继承类中重写其实现。

而 ||=至今我也没有找到其出处,还不够熟悉。有一些针对symbol的讨论,见地址:

http://stackoverflow.com/questions/7888944/scala-punctuation-aka-symbols-and-operators

对scala的符号讨论算是结束了,相信下一次各位再碰到scala让人抓狂的语法时,会有一个入手点。

补充一个,这两个符号如何应用

<:
<:<

http://www.scala-lang.org/api/current/index.html#scala.Tuple2  invert的方法。

over

【scala初学】scala symbol 符号 -3,布布扣,bubuko.com

时间: 2024-10-02 19:31:19

【scala初学】scala symbol 符号 -3的相关文章

【scala初学】scala symbol 符号 -1

scala主要分为Keywords/reserved symbols 即关键字符号 和 被保留的 符号 Keywords // Keywords <- // Used on for-comprehensions, to separate pattern from generator => // Used for function types, function literals and import renaming 我们在前面的博客对<- 和 =>有所提及,这里在简单描述一下.

【scala初学】scala 控制 for while match if

上一章我们共同研究了for循环以及变种.这章我们围绕比较常用的几个其他控制语句学习. 首先,对for进行补充,  For-Comprehensions 格式: for (s ) yield e 举例: var range = 0.until(10) var m = for (p <- range if p > 5) yield p println(m); 结果: Vector(6, 7, 8, 9) 下面我们根据官方例子来先大家展示一下,格式如下: //A simple for-compreh

scala初学12步

第一步:下载和安装Scala 在官网下载并接压缩,像安装ANT或MAVEN之类的那样,把解压后的bin路径加到path里面去就可以了. 在命令行模式下输入Scala cmd 写道 C:\Documents and Settings\19002850>scala Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.6.0_13) . Type in expressions to have them eva

【scala初学】scala IDE eclipse

上一篇我们讲了scala入门,但毕竟不是把他弄的跟脚本语言似的,scala宣扬的是要代替java啊,那我们就看他如何抢夺java的位置. scala常用的编辑器,见如下: Eclipse (using one of two shoddy and unstable Scala plugins) Emacs IntelliJ (basically just syntax highlighting support) TextMate VIM jEdit eclipse因为总是跟maven不能有效的结合

转载:理解scala中的Symbol

相信很多人和我一样,在刚接触Scala时,会觉得Symbol类型很奇怪,既然Scala中字符串都是不可变的,那么Symbol类型到底有什么作用呢? 简单来说,相比较于String类型,Symbol类型有两个比较明显的特点:节省内存和快速比较.在进入正题之前,让我们先来了解一下Java中String的intern()方法. 一.String的intern方法介绍 Oracle的开发文档上讲解的很详细:String类内部维护一个字符串池(strings pool),当调用String的intern(

初学Scala和 Java的一些区别

初学scala,和java存在很多不一致,有很多奇葩的语法,在日常使用中,可能自己不会这么写,但是很多存在于源码中,看源码的时候,经常看的一脸懵逼,因此在此总结部门差异点,部分. 文件名 java要求文件名和公共类名必须要求一致,scala不要求. 即 java: test.java -> public class test{} scala: test.scala -> class xxx(任意){} 关键字 scala 中没有public关键字,默认访问权限就是public scala中没有

初学Scala

由于项目的需要接触了Scala语言,也花了一些时间来了解和学习Scala,今天对学习的Scala进行一个小的总结. 1.What is Scala? Scala的官方网站上给出的解释是: Scala is an acronym for “Scalable Language”. This means that Scala grows with you. Scala是“Scalable Language” 扩展性(可伸缩性)语言的缩写,是一门可以与你共同成长的语言.Scala的可扩展性(伸缩性)体现

【Scala】Scala之Classes and Properties

一.前言 前面学习了控制结构,下面学习Scala的Class和Properties. 二.Class&Properties 尽管Scala和Java很类似,但是对类的定义.类构造函数.字段可见性控制等则不相同,Java更为冗长,Scala精炼.本章将通过Scala的构造函数工作原理来理解Scala的类和字段,当申明类构造函数参数和使用var.val.private关键字来修饰类的字段时,Scala编译器将会为你生成代码,根据字段修饰符不同,Scala编译器会生成不同的存取函数,本章也会展示如何重

ArcGIS API for JavaScript中Symbol符号篇

ArcGIS API for JavaScript中Symbol简介: Symbol定义了arcgis中graphics图层内几何图形(geometry)的显示样式 ArcGIS API for JavaScript中Symbol分为四大类:继承关系如下图所示: 1.点符号(MarkerSymbol):点符号(point)的显示样式 2.线符号(LineSymbol):线符号(line)的显示样式 3.面符号(FillSymbol):面符号(polygon)的显示样式 4.文本符号(TextSy