热门标签 | 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 循环中使用正则变量直接提取捕获组



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • MATLAB函数重名问题解决方法及数据导入导出操作详解
    本文介绍了解决MATLAB函数重名的方法,并详细讲解了数据导入和导出的操作。包括使用菜单导入数据、在工作区直接新建变量、粘贴数据到.m文件或.txt文件并用load命令调用、使用save命令导出数据等方法。同时还介绍了使用dlmread函数调用数据的方法。通过本文的内容,读者可以更好地处理MATLAB中的函数重名问题,并掌握数据导入导出的各种操作。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
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社区 版权所有