热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ScalaOperators,File&RegExp

OperatorsThread.`yield`()反引号除了用于命名标识符,还可以在调用方法时避免冲突(yield为Scala关键字,但也是Thread的方法)中缀运算符(infi

Operators



  • Thread.`yield`() 反引号除了用于命名标识符,还可以在调用方法时避免冲突(yield 为 Scala 关键字,但也是 Thread 的方法)

  • 中缀运算符(infix operators),实际是带两个参数的方法,定义时跟普通方法一样;a to b 实际是 a.to(b)

  • 一元运算符(unary operators)

    • +, -, !, ~四个可当做前缀运算符使用,-a 实际是 a.unary_

    • 如果可放在参数后,则是后缀运算符 a identifier


  • 赋值操作符(assignment operators),a operator= b 等价于 a = a operator b

  • 优先性

    • * / % > + - > : > <> > ! = > & > ^ > | > 非操作符 > 赋值操作符

    • 中缀运算符优先于后缀运算符


  • 结合性

    • 所有操作符都是左结合的,除了:

      • : 结尾的操作符

        • 1 :: 2 :: Nil 实际是 1 :: (2 :: Nil)

        • 右结合的二元操作符实际是第二个操作对象的方法,如 2 :: NilNil.::(2)


      • 赋值操作符



  • 如果 f(a,b,c) 调用时 f 不是函数或方法,则等价于 f.apply(a,b,c)

    • f(a,b,c) = value 则等价于 f.update(a,b,c, value);如针对 HashMap 的取值和赋值

    • 常用来构建对象时,省略 new 关键字


  • 提取器 extractors

    • 包含 unapply 方法的伴生对象,伴生对象可以定义成给任意类型做为提取器(如,为 String 自定义一个提取器 Name)

    • 在变量定义时使用

    • 在模式匹配中使用

      • case class 自动附带 applyunapply 方法,在模式匹配中会自动调用


    • 提取任意序列值,需要包含 unapplySeq 方法,返回 Option[Seq[Type]]

      • ~注意unapplyunapplySeq 的参数类型不要定义成一样的~



  • 动态调用 dynamic invocation

    • 定义动态类型

      • import scala.language.dynamics

      • 继承 scala.Dynamic


    • Scala 处理过程

      • foo.method("blah") ~> foo.applyDynamic("method")("blah")

      • foo.method(x = 1, 2) ~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))

      • foo.field ~> foo.selectDynamic("field")

      • foo.varia = 10 ~> foo.updateDynamic("varia")(10)

      • foo.arr(10) = 13 ~> foo.selectDynamic("arr").update(10, 13)

      • foo.arr(10) ~> foo.applyDynamic("arr")(10)




Files & RegExp



  • 读取所有行 Source.fromFile({name/java.io.File}).getLines.toArray,关闭资源 source.close

  • 读取字符,直接迭代 source

  • 读取标准输入 scala.io.StdIn

  • 读取 URL Source.fromURL(url, "UTF-8")

  • 读取字符串 Source.fromString("Hello ww")

  • 读取二进制文件,使用 Java 的库

  • 写文件使用 Java 的库

  • 序列化 @SerialVerionUID(42L) class Name extends Serializable

    • Serializable 为 Scala 中的 trait

    • 也可省略注解,使用默认的 UID

    • Scala 的集合都是序列化的


  • 进程控制

    • 工具包 scala.sys.process,包含隐式转换将 String 转为 ProcessBuilder

    • 执行 shell

      • "ls -l".!! 会执行 ProcessBuilder 并阻塞直到命令退出并返回退出码

      • "ls -l".!! 会将输出作为字符串返回

      • #| 管道: ("ls -l" #| "grep scala").!

      • #> 重定向输出: ("ls -l" #> new File("out.txt")).!

      • #>> 追加:("ls -l" #>> new File("out.txt")).!

      • #< 重定向输入:

        • ("grep scala" #

        • ("grep html" #


      • 设置执行目录/环境变量 Process("ls -l", new File("../"), ("LANG", "en_US")).!,环境变量为 (k, v) 序列


    • 在 Java 项目中执行 Scala 脚本 ScriptEngine engine = new ScriptEngineManager().getScriptEngineByName("scala")


  • 正则表达式

    * 工具类 scala.util.matching.Regex

    * 构造正则对象 val pattern = "[0-9]+".r

    * 存在转义、引号等情况时使用 """val pattern = """\s+[0-9]+\s+""".r

    * 捕获组使用括号表示 val patternName = "([0-9]+) ([a-z]+)".r

    * 可定义正则变量作为提取器 val pattern(num, item) = "123 abc" (patternName 与定义的正则名一致)

    * 也可在 for 循环中使用正则变量直接提取捕获组



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
author-avatar
_雁火漫天_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有