• scala Basic 第三课


    yield

    在学习c#的时候学习过这个关键字,和这时的语义是一致的。
    当你生成一个新的迭代器,而并不是想立刻使用,而是在其他地方使用的时候,可以延迟生成这个集合,
    这时候yield关键字可以帮你完成这样的功能。
    这就你是一个支票,可以让你在需要的时候向jvm取到集合数据。它是延迟实现的集合。
    val a=for (i <- 1 to 10 if(i%7 ==0))
    yield i
    println(a)
    a.foreach(println)

    String的替换与查找:
    val str="errors,"
    str.replaceAll("[^a-zA-Z]","")
    val log="there are some disk error, please check how to handler these error please!"
    import scala.util.matching._
    val r = new Regex("""error""")
    r.findAllIn(log)
    println(r)
    单例对象可以和类具有相同的名称,此时该对象也被称为“伴生对象”。我们通常将伴生对象作为工厂使用。

    val times = 1

    times match {
      case 1 => "one"
      case 2 => "two"
      case _ => "some other number"
    }
    在最后一行指令中的_是一个通配符;它保证了我们可以处理所有的情况。
    否则当传进一个不能被匹配的数字的时候,你将获得一个运行时错误。

    case class
    使用样本类可以方便得存储和匹配类的内容。你不用new关键字就可以创建它们。

    case class ApacheAccessLog(ipAddress: String, clientIdentd: String,
                               userId: String, dateTime: String, method: String,
                               endpoint: String, protocol: String,
                               responseCode: Int, contentSize: Long) { 
    
    } 
    
    object ApacheAccessLog {
      val PATTERN = """^(S+) (S+) (S+) [([w:/]+s[+-]d{4})] "(S+) (S+) (S+)" (d{3}) (d+)""".r 
    
      def parseLogLine(log: String): ApacheAccessLog = {
        val res = PATTERN.findFirstMatchIn(log)
        if (res.isEmpty) {
          throw new RuntimeException("Cannot parse log line: " + log)
        }
        val m = res.get
        ApacheAccessLog(m.group(1), m.group(2), m.group(3), m.group(4),
          m.group(5), m.group(6), m.group(7), m.group(8).toInt, m.group(9).toLong)
      }
    }

    给已有的string类添加自己想要的方法,其实最早接触这种想法是在做c#开发时,c#已经引入了这种实现,不过是使用静态类的思路,这里scala也基本类似,不过是使用

    它自己的implicit的语法。示例如下(来自scala cookbook)

    implicit class StringImprovements(s: String) {
    def increment = s.map(c => (c + 1).toChar)
     }

    即普通的类定义前面加上一个implicit,然后是类名字里面使用是就是要扩展方法的基础类的参数。

  • 相关阅读:
    python_day16_闭包_装饰器
    高阶函数_递归函数_内置函数
    python_day14_函数_返回值_局部和全局变量
    python_day14_set_回到了python的学习
    grep_sed_awl_vim
    jQuery学习之选择器
    css3之其他的属性
    css3之响应式
    css3之各种布局
    css3之各种变形
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/5245844.html
Copyright © 2020-2023  润新知