参考Intellj idea中使用Gradle创建Scala项目 下载安装jdk gradle scala. 创建gradle项目. File->New->Project.....创建gradle项目 ? 填写项目名 修改build.gradle, 填写如下内容。...', name: 'scala-library', version: '2.12.0' //添加scala基本库 testCompile group: 'org.scalatest', name...新建目录 在src/main/scala右键->New->Scala Class, 选择Object ?...org.slf4j/slf4j-log4j12 testCompile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25' } 创建启动项
2022-11-14:rust语言,请使用过程宏给结构体AAA生成结构体AAABuilder和创建AAABuilder实例的方法。...宏使用如下:#[derive(Builder)]pub struct AAA { a: String, b: i32, c: f64, d: Vec,}宏展开后变成如下代码
文章目录 ARM汇编语言的伪操作、宏指令与伪指令 两种编译模式的集成开发环境IDE介绍 ADS/SDT IDE开发环境 集成了GNU开发工具的IDE开发环境 ADS编译环境下的ARM伪操作和宏指令 符号定义伪操作...GBLA,GBLL及GBLS 语法格式 使用示例 LCLA,LCLL及LCLS 语法格式 使用示例 SETA,SETL及SETS 语法格式 寄存器列表定义伪指令RLIST ARM汇编语言的伪操作、宏指令与伪指令...宏指令是一段独立的程序代码,可以插在源程序中,它通过伪操作来定义。宏在被使用之前必须提前定义好,宏之间可以互相调用,也可以自己递归调用。通过直接书写宏名来使用宏,并根据宏指令的格式设置相应的输入参数。...使用示例 GBLA A1 ;定义一个全局的数值变量,变量名为A1 A1 SETA 0x0F ;将该变量赋值为0x0F GBLL A2 ;定义一个全局的逻辑变量...SETA伪操作给一个全局或局部算术变量赋值 SETL伪操作给一个全局或局部逻辑变量赋值 SETS伪操作给一个全局或局部字符串变量赋值 语法格式 Variable expr 其中: <SETX
程序开始和结束伪操作 数据定义及存储器分配伪操作 表达式赋值伪操作 地址计数器与对准伪操作 基数控制伪操作 汇编操作符汇总 算术操作符 逻辑和移位操作符 关系操作符 数值回送操作符 属性操作符 汇编过程....exe的诞生 程序运行步骤及生成的文件 汇编过程 宏汇编 C语言中的预处理命令 汇编中的宏---由C中的宏定义说起 举例 语法和术语 子程序VS宏定义 宏中的局部标号 变元是操作码的一部分 宏库 条件汇编...使用WORD_ARRAY标号来操作这块内存时,会按字为单位进行操作 使用BYTE_ARRAY标号来操作这块内存时,会按字节为单位进行操作 ---- 表达式赋值伪操作 表达式名 EQU 表达式 ALPUA...---- 基数控制伪操作 如果不明确指定,默认使用当前规定的基数,如果在数值末尾明确指定了基数,则不使用全局默认基数。...,但是如果一个宏定义里面,存在关于标号的定义,那么再一段子程序中,重复调用宏,再编译展开宏的时候,便会出现标号重复的问题,因此在宏中引入了局部标号,确保宏不会重复 ---- 变元是操作码的一部分 变元也可以用在操作码部分
类型安全: Scala创始人是教授,他先带领创建了java 5编译器,而后觉得Java有太多羁绊而发明了Scala。Scala编译器和类型系统非常强大,它的目标是尽量把软件错误消灭在编写过程中。...联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。...而var类似于一般的非final变量,可以任意重新赋值。...可以根据赋值的内容推算出变量的类型。...{exp1;exp2} { exp1 exp2 } 循环 第五步使用while来实现循环,和使用Java实现无太大差异,而Scala是面向函数的语言,更好的方法是采用“函数式”风格来编写代码。
前段时间,我为Scala 3提出了XML字面量语法提案,在社区中正在讨论。这个提案可能预示着 Scala 3、Scala.js和Binding.scala的未来前景。为什么这么说?...比如说函数式编程语言里的ADT,到了Scala里面就用继承实现,对Java程序员来说很好懂。再如Scala原本设计的赋值符号是“:=”,跟OCaml一样。...比如像是数据挖掘的Spark、消息队列的Kafka,都是用Scala开发核心部分然后支持Java用户使用。 Scala对工业界的友好性处处可见。...那么,如果想要把XML翻译成其他库(比如Binding.scala),就需要再写一个宏或者编译器插件,把对scala.xml的调用翻译成对其他库的调用。...宏或者编译器插件的编写难度很大,所以能像Binding.scala这样利用起XML字面量的库很少。
在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。文件指示。...递归赋值 ( = ) 赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响。条件赋值 ( ?= ) 如果变量未定义,则使用符号中的值定义变量。...clean这个伪目标功能是删除所有被make创建的文件。install这个伪目标功能是删除所有被make创建的文件。print这个伪目标的功能是例出改变过的源文件。...tar这个伪目标功能是把源程序打包备份。也就是一个tar文件。dist这个伪目标功能是创建一个压缩文件,一般是把tar文件压成Z文件。或是gz文件。...TAGS这个伪目标功能是更新所有的目标,以备完整地重编译使用。check 和test这两个伪目标一般用来测试makefile的流程。常见问题1.
定义编译规则、自动化编译、提高效率 组织文件 Makefile由一组规则(Rule)组成,每条规则的格式是: 例如: 依赖关系如下图: 注意: (1) 当我们为了执行命令而非创建目标文件时,就会使用伪目标比如...clean,伪目标总是被执行。"....(2) 使用 "-" 前缀可以忽略命令错误,比如创建已有的路径; “@” 可以不显示命令本身 (3) Makefile 中 $、# 有特殊含义,可以进行转义 "\#"、"$$"。...=" 表示变量为空或未定义时才进行赋值操作。..."+=" 追加赋值,也是递归展开 执行shell命令赋值给变量 A = $(shell uname) 文件包含:include 注释: “#” 特殊变量: 三、Makefile 工作常用点补充
传统方式是使用伪目标(phony target). 之所以用“伪”这个词,是因为它们没有相关文件与之关联,所以伪目标永远都不会是最新状态。习惯上,使用伪目标 all 作为默认目标。...这个 Makefile 的使用者也可以使用 make all 来构建整个项目。 另一个常见的伪目标是 clean,它会移除所有 make 创建的文件。...$ export CC=clang $ export CFLAGS=-O3 $ make -e all 除了简单赋值(=), 一些 make 的实现有一些其他特殊的宏赋值操作符。...按照惯例,这个目标应该使用 PREFIX 和 DESTDIR 宏。...DESTDIR 是一个用于 staged build(分段式构建) 的宏,为了打包的需要,它会安装到一个伪根目录。与 PREFIX 不同,它实际上不会从这个目录下运行。
1、 预处理: 就是对程序中的宏定义等相关内容先进行前期的处理,诸如包含的.h文件,一般.h文件中都会有#ifndef、#define、#endif等操作预处理函数,对该部分函数进行预处理。...4、makefile编译脚本 1、脚本创建 在main.c的目录中创建Makefile文件,首字母M一定要大写!,之后在Makefile文件中输入脚本内容,每一行首需要空出来的地方一定要使用TAB键!...2、脚本使用—make 创建好Makefile文件并编辑完毕后,使用make指令即可生成对应的.o文件及可执行文件。 ? 5、Makefile语法 1....= 4.1、=赋值 使用=在给变量赋值时,不一定使用已经定义好的值,也可以使用后面定义的值,变量的真实值为其所引用的变量的最后一次有效值。...4.2、:=赋值 不会使用后面定义的变量,只能使用前面已经定义好的。 4.3、?=赋值 “?
比如关于扩展方法的使用。之前采用的是Helper类的方法,重构时改用了扩展方法。创建Helper类基本上没有使用scala中牛逼的类型系统(实际是因为不懂),泛型也只是偶尔用了一下。...在总结此次重构的过程中,我发现自己对scala中的泛型以及类型知之甚少,于是开始在网上搜索相关资料,搜索到了王宏江的博客,咋一见,就像获得了九阳真经一样,沉溺其中无法自拔,就引起了本篇故事。...二、缘生 其几十篇博客详细讲解了scala语言以及函数式编程。用了一周多时间将其概略读完,颠覆了我对scala以及函数式编程乃至编程的认识。...正像其在博客中说的,大部分人都是在像使用java那样使用scala,而我之前主要在使用C#,也学习过java,所以我是彻彻底底的在像使用C#那样使用scala,当然现在来看C#的“用”也是最低级的“用”...而我完全是自学,没有人指导,完全靠着自己的摸索,所以之前缺乏了理论和背后逻辑的学习,这次通过学习王宏江的博客感觉慢慢的入了门了。
中未定义的宏 autoscan–>autoheader–>aclocal–>automake|autoconf ?...(GNU m4宏处理器处理*.m4宏文件) ####2.编译 gcc找不到头文件: sudo find /(目录) -name 文件 makefile的一般格式:目标:依赖 命令 例如:a.c...(可以隐式定义) # 用"make {目标名}"执行该伪目标 .PHONY : clean clean : @rm -f main *.o @echo 'clean' makefile变量定义: '=...':(直接赋值,只有变量引用则未被赋值) ':=':(选择有值的变量赋值) '?...=':(已被赋值的变量不赋值) '+=':(追加赋值,**makefile变量值都是字符串**) 变量引用:$(变量) makefile条件选择: ifeq 'arg1' 'arg2'或ifeq (
语法格式 Java 变量定义 int a = 0; 在scala中,可以使用 val 或者 var 来定义变量,语法格式如下: val/var 变量标识:变量类型 = 初始值 其中 val定义的是不可重复赋值的变量...name = "Jim" 很自然的发现报错了,因为我们在上面一个步骤中创建变量name时使用的是val,而val定义的变量无法进行二次赋值(有点类似于Java中的final)。...示例: 使用 var 重新定义变量来保存名字"tom",并尝试重新赋值为Jim,观察其运行结果 参考代码: scala> var name:String = "tom" name: String...TIP] 优先使用val来定义变量,如果变量需要被重写赋值,才使用var ---- 使用类型推断来定义变量 scala的语法要比Java简洁,我们可以使用一种更简洁的方式来定义变量。...可以使用惰性赋值来提高效 率。 语法格式: lazy val/var 变量名 = 表达式 示例: 在程序中需要执行一条以下复杂的SQL语句,我们希望只有用到这个SQL语句才加载它。
——在CSS中使用JavaScript表达式赋值。...例:10px10px=100pxpx (3)、sass中的嵌套:选择器嵌套,属性嵌套,伪类嵌套 选择器嵌套 ul{ li{} } 后代 ul{ >li{} } 子代 &:表示上一层 div{...ul{ li{ &==“div ul li” } } } 属性嵌套:属性名与大括号之间必须有: 例如:border:{color:red;} 伪类嵌套:ul{li{ &:hover{ “ul li:...hover” } } } (4)、混合宏、继承、占位符 ①混合宏:声明:@mixin name($param:value){} 调用:@include name(value); >>>声明时,可以有参...同less >>>优点;可以传参,不会生成同名class; >>>缺点:会将混合宏中的代码,copy到对应的选择器中,产生冗余代码!
函数式编程 将函数赋值给变量 匿名函数 高阶函数 高级函数的类型推断 scala的常用高阶函数 闭包 sam转换 currying函数 return 将函数赋值给变量 scala中的函数是一等公民,可以独立定义...,独立存在,而且可以直接将函数作为值赋值给变量 scala> def sayHello(name:String){println("Hello, "+name)} sayHello: (name: String...,此时函数被称为匿名函数 可以直接定义函数后,将函数赋值给某个变量;也可以将直接定义的匿名函数传入其他函数之中 scala定义匿名函数的语法规则就是,(参数名:参数类型)=>函数体 scala> val..."的msg被保留在了函数体内部,可以反复的使用 这种变量超出了其作用域,还可以使用的情况,即为闭包 scala通过为每个函数创建对象来实现闭包,实际上对于getGreetingFunc函数创建的函数,msg...此时就可以使用scala提供的,在调用java方法时,使用的功能,SAM转换,即将SAM转换为scala函数 要使用SAM转换,需要使用scala提供的特性,隐式转换 scala> import javax.swing
String,Int] = Map(Alice -> 90, Kim -> 89, Bob -> 98) 上面构造了一个不可变的Map[String, Int],其值也不能被改变.如果想要一个可变映射,使用如下命令创建...[String,Int] = Map(Bob -> 98, Alice -> 90, Kim -> 89) 如果只想创建一个空的映射: scala> val scores = new scala.collection.mutable.HashMap...[String, Int] scores: scala.collection.mutable.HashMap[String,Int] = Map() 从上面我们可以知道使用->操作符来创建映射的键值对元素...= Bob 通常,使用模式匹配的方式来获取元组的组元: scala> val (id, score, name) = bobScore // 将变量id赋值为1,变量score赋值为98.5,变量name...赋值为Bob val bobScore: (Int, Double, String) scala> val (id, score, name) = bobScore id: Int = 1 score
立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。...为什么不使用 “if(((a == b) == TRUE) == TRUE)” 呢?)...一般规则是只在向布尔变量赋值或函数参数中才使 用 TRUE 和 FALSE (或类似的东西), 或者用于函数的返回值, 但决不用于比较。...预处理宏 TRUE 和 FALSE (当然还有 NULL) 只是用于增加代码可读性, 而 不是因为其值可能改变。...尽管使用 TRUE 和 FALSE 这样的宏 (或者 YES 和 NO) 看上去更清楚, 布尔 值和定义在 C 语言中的复杂性让很多程序员觉得 TRUE 和 FALSE 宏不过更令人 迷惑, 因而更喜欢使用
函数式编程 将函数赋值给变量 Scala 中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量。...一等公民表现在: 1.可以传递、赋值 2.嵌套函数和匿名函数 3.具有高阶函数 4.偏应用 5.闭包 Scala的语法规定,将函数赋值给变量时,必须在函数后面加上空格和下划线。...Scala通过为每个函数创建对象来实现闭包,实际上对于 getGreetingFunc 函数创建的函数, msg 是作为函数对象的变量存在的,因此每个函数才可以拥有不同的 msg,Scala 编译器会确保上述闭包机制...由于 Scala 是可以调用 Java 的代码的,因此当我们调用 Java 的某个方法时,可能就不得不创建 SAM 传递给方法,非常麻烦;但是 Scala 又是支持直接传递函数的。...此时就可以使用 Scala 提供的,在调用 Java 方法时,使用的功能,SAM 转换,即将 SAM 转换为 Scala 函数。 要使用SAM转换,需要使用 Scala 提供的特性,隐式转换。
2.2 Scala变量声明 和java类似,Scala中的变量需要在创建时进行声明,有var和val两种声明方式,其中val类型变量定义后不可以重新赋值,而var类型变量声明之后可以自由赋新值,下面在...,val声明后的变量不可重新赋值,而var则可以。 ...逻辑非 Scala中的赋值运算符如下: 运算符 描述 = 将右侧的值赋给左对象 += 先做加法再赋值 -= 先做减法再赋值 *= 先做乘法再赋值 /= 先做除法再赋值 %= 先做求模取余再赋值.../在创建好的可变长数组的末尾添加多个元素 scala> arrayBuffer += (5,6,7) res4: scala.collection.mutable.ArrayBuffer[Int] =... 和Python中的集合类似,Scala中的集合只允许不重复的若干元素存放在其中,因此可以用来去重,且Set集合分为不可改变的和可变的,即其本身能否被重新赋值或更改,默认情况下Scala中使用不可变的集合
领取专属 10元无门槛券
手把手带您无忧上云