文档章节

Scala 学习

pearma
 pearma
发布于 2017/04/13 15:23
字数 805
阅读 17
收藏 1

如何使用resources文件夹中的文件?

一般的scala项目,会在/prj/src/main下面再建立一个resources文件夹。可以用来存放一些需要在程序运行过程中访问的文件 ,而且这个文件夹的内容会参与jar包生成,随着程序一并被分发。

如何访问呢?很简单:

import scala.io.Source
object Main extends App {
  val filename = "ip映射表.csv"
  for (line <- Source.fromResource(filename).getLines) {
    println(line.split(",")(0),line.split(",")(1),x)
  }
}

scala中的tail Recursion

且不说这个怎么翻译,主要是介绍一下特点。看一个例子吧:

```
def gcd(a: Int, b: Int): Int =
  if (b == 0) a else gcd(b, a % b)

gcd(14, 21)
if (21 == 0) 14 else gcd(21, 14 % 21)
if (false) 14 else gcd(21, 14 % 21)
gcd(21, 14 % 21)
gcd(21, 14)
if (14 == 0) 21 else gcd(14, 21 % 14)
if (false) 21 else gcd(14, 21 % 14)
gcd(14, 7)
gcd(7, 14 % 7)
gcd(7, 0)
if (0 == 0) 7 else gcd(0, 7 % 0)
if (true) 7 else gcd(0, 7 % 0)
7
```
以上代码虽然是递归执行,但是并没有需要为每次的递规保留历史数据,而且最后直接出结果,而不是一层层向上返回。所以这类性质的函数,就可以通过加@tailrec annotation提醒编译器予以优化。

```
@tailrec
def gcd(a: Int, b: Int): Int =
```
  • scala的类

    为了和java区分开,scala的类叫object. java中以class包装每一个文件,scala用object来包装。换汤不换药。object里可以套def,也就是java里的function。

    在scala中,为了描述一个对象,它引入了一个case class的概念。感觉就是瞎jb胡闹。为了和java割裂而割裂。且看以下代码:

    case class Note(
          name: String,
          duration: String,
          octave: Int
    )
    

    在class之上,又出现一个trait来包装它,且看代码:

    sealed trait Symbol
    case class Note(name: String, duration: String, octave: Int) extends Symbol
    case class Rest(duration: String) extends Symbol
    
  • 向量怎么创建

    val sample = 1 to 10
    
  • 什么是partial function

    一向都觉得scala的语法设计,有点脱裤子放屁的味道。这次又搞出一个partialfunction的关键字。这居然是只有一个只能接受1个参数,1个返回值的函数。例如:

      val isEven: PartialFunction[Int, String] = 
    	{
    		case x if x % 2 == 0 => x+" is even"
    	}
    

    你说,参数和返回值都放在一个括号里,如果不看文档,如何知道前一个是参数,后一个是返回值?这样的设计,和其他地方的设计,在理念上都是冲突的。

  • 自动推断数据类型

    scala号称可以自动推断数据类型,但是也有它无法推断的情况。所以非常不明白,语法设计者,设计这个到底是为了省事,还是认为增加代码的可理解性。既然你做不到彻底,那装啥B呢?

    import scala.annotation.tailrec
    def factorial(i: Int): Long = {  //这里的Long,无法推断出来,所以必须写。
    @tailrec
    def fact(i: Int, accumulator: Int): Long = {
    if (i <= 1) accumulator
        else fact(i - 1, i * accumulator)
        }
    fact(i, 1)
    }
    

    定义一个函数,就是采用以下方式.

    def triangleArea(base: Double, height: Double): Double =  base * height / 2 
    

如何实现ip地址转地区?

    val src=Array("hello,10.1.2.12","sorry,192.168.1.2")
    val srcRdd=sc.parallelize(src)
    val tmpRdd=srcRdd.map(x=>x.split(","))
#   val destRdd=tmpRdd.map(x=>x(0)+x(1).substring(1,4))
#   val destRdd=tmpRdd.map(x=>x(0)+toAddress(x(1)))

© 著作权归作者所有

上一篇: Spark R学习心得
下一篇: Sbt 使用技巧
pearma
粉丝 3
博文 67
码字总数 26042
作品 0
徐汇
高级程序员
私信 提问
几个 Scala 在线学习资源(E文)

最近想学习下 Scala ,下面是找到的一些 E 文的在线学习资源 The official Scala site, start at the Learning Scala trail or take a tour of Scala. First steps to Scala by Bill Venners......

华宰
2011/06/16
1K
2
Scala 技术周刊 | 第 21 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Play! Framework 系列(二):play 的项目结构 Play! Framework 系列 Scalameta tu...

ScalaCool
2017/09/15
0
0
【Scala-ML】如何利用Scala构建并行机器学习系统

引言 在学习Scala的过程中,我发现其在构建大规模分布式计算系统上有与生俱来的特质。其丰富的类型系统可以帮助编程设计提供很好的信息隐藏和抽象,其monoids和monads概念利用Scala高阶函数实...

JasonDing
2016/03/19
0
0
Scala:用 Scala 进行 OO 教学

1、 怎样用OO思想分解问题?OO这种思考过程有什么优点、限制和不足? 2、 为什么模块化的OO范式使得其具有可扩展性?基于类的编程方法在模块性方面有什么优点和不足?哪些设计模式和现代编程...

技术小阿哥
2017/11/27
0
0
Scala 学习笔记 模式匹配

1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函数和偏应用函数、Scala学习笔记(七) Sealed Class 和 Enumeration都是为了这一篇而铺垫准备的...

Tony沈哲
2017/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

网站安全维护公司对渗透测试php后门分析

很多想做渗透测试的朋友都想了解关于PHP后门漏洞的安全测试重点方法,以及该如何预防被中php后门,本节由我们的Sine安全高级渗透工程师进行全面的讲解,来让大家更好的理解和了解php代码的安全...

网站安全
3分钟前
1
0
在github上创建代码仓库时忘记添加.gitignore文件或修改了.gitignore该怎么办?

#清除本地缓存(改变成未track状态) #git rm -r --cached . 表示清除项目中所有文件的本地缓存 git rm -r --cached xxx #xxx表示不想版本控制的文件,比如小编可以输入test.o #.gitignore中的...

博爱飞扬
4分钟前
1
0
Fsimage 与 EditLog定义及合并过程

有很多客户端在向 hdfs 中写数据,同时有很多客户端在查数据,这就涉及到一个响应速度问题。因为只有一个 namenode ,客户端在写的时候,必须迅速记下来。 1. 向 namenode 询问可以存储到哪些...

Garphy
7分钟前
2
0
TI KeyStone C66x开发板处理器、NAND FLASH、NOR FLASH

TL6678F-EasyEVM是广州创龙基于SOM-TL6678F核心板而研发的一款多核高性能DSP+FPGA开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的8层板设计,尺寸为247.33mm*139.8mm,它为用户提...

Tronlong创龙
25分钟前
3
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第13题

Choose the best answer. Examine this query: SELECT TRUNC (ROUND(156.00,-2),-1) FROM DUAL; What is the result? A) 16 B) 160 C) 150 D) 200 E) 100 Answer:D (解析:关键就是 round ......

oschina_5359
35分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部