yygmind


  • Home

  • Categories

  • Archives

  • Tags

  • Search

Scala Cookbook读书笔记 Chapter 3.Control Structures 第二部分

Posted on 2016-09-18   |   In Scala   |     |   visitors

3.8 使用一个case语句匹配复杂条件

  • 几个匹配条件要求执行相同的业务逻辑,而不是使用多个case重复业务逻辑,想要使用的是匹配条件的业务逻辑的复制。

    3.8.1 解决方案

  • 使用 | 分隔符将相同的业务逻辑的匹配条件放置到同一行上

    val i = 5
    i match {
        case 1 | 3 | 5 | 7 | 9 => println("odd")
        case 2 | 4 | 6 | 8 | 10 => println("even")
    }
    
  • 其他类型也适用:

    val cmd = "stop"
    cmd match {
        case "start" | "go" => println("starting")
        case "stop" | "quit" | "exit" => println("stopping")
        case _ => println("doing nothing")
    }
    
    Read more »

Scala Cookbook读书笔记 Chapter 3.Control Structures 第一部分

Posted on 2016-09-14   |   In Scala   |     |   visitors

3.0 总体介绍

  • Scala中的if/then/else结构和Java中很像,但是它还可以用来返回一个值。比如Java中用的三目运算,在Scala中只需要使用正常的if语句即可。

    val x = if (a) y else z
    
  • try/catch/finilly结构和Java中很像,但是Scala中的catch部分使用的是模式匹配。
  • Scala中可以使用2个for循环读取文件的每行,然后在每行上操作每个字符:

    for (line <- source.getLines) {
        for {
            char <- line
            if char.isLetter
        } // char algorithm here ...
    }
    
  • 在Scala中,还可以更加简单点:

    for {
        line <- source.getLines
        char <- line
        if char.isLetter
    } // char algorithm here ...
    
Read more »

Scala Cookbook翻译 Chapter 2.Numbers 第二部分

Posted on 2016-09-08   |   In Scala   |     |   visitors

2.4 代替++和–

  • 问题:你想要在其他语言用++和–操作符增长数值或减少数值,但是在Scala中没有这些运算符。

    2.4.1 解决方案

  • 因为val字段时不可改变的,他们不能增加或者减少,但是var整形字段可以通过+=和-=方法改变。

    scala> var a = 1
    a: Int = 1
    
    scala> a += 1
    
    scala> println(a)
    2
    
    scala> a −= 1
    
    scala> println(a)
    1
    
Read more »

Scala Cookbook翻译 Chapter 2.Numbers 第一部分

Posted on 2016-09-07   |   In Scala   |     |   visitors

总体介绍

  • Scala中所有的数值类型都是对象,包括Byte,Char,Double,Float,Int,Long和Short。这7个数值类型继承自AnyVal特质,Unit和Boolean类被认为是“非数字的值类型”。
  • 这七个内置的数值类型有相同的数据范围,和java中是等价的。

    Data    type Range
    Char    16-bit unsigned Unicode character
    Byte    8-bit signed value
    Short    16-bit signed value
    Int    32-bit signed value
    Long    64-bit signed value
    Float    32-bit IEEE 754 single precision float
    Double    64-bit IEEE 754 single precision float
    
  • 除了这些类型之外,Boolean有true或者false的值。

  • 如果想要知道这些数据范围的精确值,可以通过Scala的REPL中查到。

    scala> Short.MinValue
    res0: Short = −32768
    
    scala> Short.MaxValue
    res1: Short = 32767
    
    scala> Int.MinValue
    res2: Int = −2147483648
    
    scala> Float.MinValue
    res3: Float = −3.4028235E38
    
Read more »

Scala Cookbook翻译 Chapter 1.Strings 第三部分

Posted on 2016-09-06   |   In Scala   |     |   visitors

1.8 提取一个匹配模式的字符串的部分

  • 问题:你想要提取出一个字符串中的一个或多个部分,以匹配你指定的正则表达式模式。

    1.8.1 解决方案

  • 定义要提取的正则表达式模式,将圆括号放在他们周围,所以可以把它们作为“正则表达式组”,首先定义所需的模式:

    val pattern = "([0-9]+) ([A-Za-z]+)".r
    
  • 然后从目标字符串中提取正则表达式组

    val pattern(count, fruit) = "100 Bananas"
    
  • 此代码从给定的字符串中提取出数字字段和字母字段作为两个独立的变量,count和fruit。

    scala> val pattern = "([0-9]+) ([A-Za-z]+)".r
    pattern: scala.util.matching.Regex = ([0-9]+) ([A-Za-z]+)
    
    scala> val pattern(count, fruit) = "100 Bananas"
    count: String = 100
    fruit: String = Bananas
    
Read more »

Scala Cookbook翻译 Chapter 1.Strings 第二部分

Posted on 2016-09-05   |   In Scala   |     |   visitors

1.5 遍历字符

  • 问题:你想遍历字符串中的每个字符,在遍历字符串时对每个字符进行操作。

    1.5.1 解决方案:

  • 根据你的需求和喜好,你可以使用map或者foreach方法,一个是循环,另一个是其他方法。

  • map把输入字符转成大写的例子

    scala> val upper = "hello, world".map(c => c.toUpper)
    upper: String = HELLO, WORLD
    
    //大部分使用以下缩写,使用下划线的魔法
    scala> val upper = "hello, world".map(_.toUpper)
    upper: String = HELLO, WORLD
    
  • 任何集合中,如字符串的字符序列,你可以把集合方法链接在一起以达到预期的结果。下面的例子是在原始字符串的基础上调用filter方法将所有的小写字母“L”删除后创建一个新的字符串,然后已这个新的字符串作为ma方法的输入将剩余的字符转换成大写字符。

    scala> val upper = "hello, world".filter(_ != 'l').map(_.toUpper)
    upper: String = HEO, WORD
    
    Read more »

Scala Cookbook翻译 Chapter 1.Strings 第一部分

Posted on 2016-09-03   |   In Scala   |     |   visitors

1.0 总体介绍

  • Scala中的String类型就是Java中的String,所以可以使用Java中String的一些方法。
  • Scala提供了隐式转换,String也可以使用StringOps类的所有方法,此时可以把String当做字符序列,

    • 可以利用foreach迭代打印每个字符:”hello”.foreach(println)
    • 通过for循环打印每个字符:for (c <- “hello”) println(c)
    • 也可以当做字节序列:”hello”.getBytes.foreach(println) //104 101 108 108 111(十进制ASCII编码)
    • 使用过滤器:val result = “hello world”.filter(_ != ‘l’) //heo word
  • 实际上这些方法并不都是来自类StringOps,有的还来自StringLike和WrappedString等,可到api文档查看String到StringOps的隐式转换。

Read more »

各大Android开发群问题总结及解决

Posted on 2016-05-31   |   In Android   |     |   visitors
  • 1、 android比较好用的websocket三方库
    • websocket老是会自动断
    • socket.io
      • 采用轮询的方式,会定时发心跳包检测连接状态,基于事件通信。
      • 服务端nodejs,客服端java,ios都有支持库
      • android端可以基于这个库封装你自己的推送和即时聊天框架
      • 包含有websocket的,底层基于okhttp-ws,支持http,https,websocket
    • 好像要用nio的socket,不然会有丢包现象

  • 2 、retrofit如何设置cookiemanager
    • CookieManager 应该交给下面的 okhttp 做
    • 知道在OkhttpClient中设置 可是在okhttp3中 OkhttpClient没有设置cookieManager的方法
    • 那你搜搜 okhttp3 CookieManager 啊

Read more »

解决两个ViewPager的冲突事件

Posted on 2016-04-27   |   In Android   |     |   visitors

情景还原:

这里写图片描述

一种方法是在内部ViewPager调用时设置点击侦听。
不过这个方法有一个bug,就是快速滑动内部ViewPager时此方法可能来不及调用,事件直接返回给了外部ViewPager

Read more »

JNI之C语言多级指针剖析

Posted on 2016-04-23   |   In JNI   |     |   visitors

一级指针

假设在内存中定义一个一级指针。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
main() {

int i = 3;
int * j; //定义一级指针j
j = &i; //把i的地址赋给指针j

printf("%d\n", i); //打印整形变量i的值
printf("%#x\n", &i); //打印整形变量i的地址
printf("%#x\n", j); //打印指针j的值,即变量i的地址(&i)
printf("%#x\n", &j); //打印指针j定义时系统所分配的地址(指针j的地址)
printf("%d\n", *j); //打印指针j的值所对应地址上的值(i的值)
system("pause"); //让运行窗口暂停

}
Read more »
1234
yygmind

yygmind

To obsess or to die

34 posts
10 categories
30 tags
github zhihu csdn
© 2016 - 2018 yygmind
Powered by Hexo
Theme - NexT.Muse