为了账号安全,请及时绑定邮箱和手机立即绑定
2.2 双引号

定义:双引号内存放文字的字符串对象。使用场景:推荐用来定义复杂的字符串(包括转义符或者表达式插值操作)。实例:# 输出一段文字puts "Hello Ruby!"# ---- 输出结果 ----Hello Ruby!当使用双引号创建字符串对象时,首先他会查找以反斜杠\开头的字符,进行转义操作,其中最常见转义符为\n,它叫做换行符,当输出包含换行符的字符串的时候,\n会被强制转换为换行。实例:# 输出带有换行符的字符串puts "Goodnight,\nAlice"# ---- 输出结果 ----Goodnight,Alice其次,双引号字符串做的第二件事是表达式插值,在字符串中,#{表达式}会被表达式的结果替换。实例:# 表达式插值name = 'Alice' #定义一个局部变量name,这里的字符串单引号双引号均可puts "Goodnight, #{name}"# ---- 输出结果 ----Goodnight, Alice表达式也可以是数学运算。实例:x, y, z = 12, 36, 72puts "x 的值为 #{ x }"puts "x + y 的值为 #{ x + y }"puts "x + y + z 的平均值为 #{ (x + y + z)/3 }"# ---- 输出结果 ----x 的值为 12x + y 的值为 48x + y + z 的平均值为 40如果表达式只是全局变量$,类变量@@或实例变量@,则可以省略花括号。变量类型将在之后章节给大家普及。实例:puts "This is line #$."# ---- 输出结果 ----This is line 1经验:除了#{}这种表达式插值的形式,使用+也可以进行字符串拼接操作,但是要求进行拼接的两个变量的类型一定是字符串,否则会抛出异常,Ruby 会将#{}表达式中的结果强制转化为字符串,我们不需要关心变量的类型,只需要关心拼接的操作。所以,最好不使用+来拼接字符串。对比下面两种情况:x = 12puts "x 的值为 #{x}"# ---- 输出结果 ----x 的值为 12x = 12puts "x 的值为 " + x# ---- 输出结果 ----Traceback (most recent call last): 1: from ruby.rb:2:in `<main>'ruby.rb:2:in `+': no implicit conversion of Integer into String (TypeError)而这样就不会抛出异常:x = 12puts "x 的值为 " + x.to_s # 将12从数字转化成字符串# ---- 输出结果 ----x 的值为 12

2.1 单引号

定义:单引号内存放文字的字符串对象。除少数情况,单引号中的内容将成为字符串的值。使用场景:定义简单的字符串(不包含转义符以及表达式插值操作)。实例:puts 'Hello Ruby!'# ---- 输出结果 ----Hello Ruby! 当您想要在单引号字符串中使用单引号'时,为了不要让 Ruby 将输入的单引号理解为终止符号,您需要使用反斜杠\。实例:# 输出带有'的单引号字符串puts 'What\'s your name?'# ---- 输出结果 ----What's your name? 两个连续的反斜杠\\被单个反斜杠替换。实例:# 在单引号字符串中输入两个反斜杠puts 'escape using "\\"'# ---- 输出结果 ----escape using "\"

2.3 %q和%Q

定义:%q同单引号规则,%Q同双引号规则。使用场景:定义多行字符串。在q和Q之后的字符是分隔符,如果是[、{、(、!或<则将读取字符串,直到找到匹配的结束符号,否则将一直读取字符直到下一次出现相同的分隔符为止。实例:%q/生成单引号字符/ # 相当于 '生成单引号字符'%Q!生成双引号字符! # 相当于 "生成双引号字符"%Q{Seconds/day: #{24*60*60}} #相当于 "Seconds/day: #{24*60*60}"# ---- 输出结果 ----生成单引号字符生成双引号字符Seconds/day: 86400

2.1 字符串 String

在 Groovy 中,字符串较 Java 中比较特殊,在 Java 中我们用单引号(’’)来表示 char,用双引号("")表示字符串。但是在 Groovy 中字符串不仅可以用双引号 (""),而且单引号 (’’),三引号 ("’’")也可以。我们看下下面这个例子:class Example { static void main(String[] args) { String a = '单引号'; String b = "双引号"; String c = '''这是三引号 Gradle专题 Groovy语言基础'''; println(a); println(b); println(c); } }最终输出结果为:单引号双引号这是三引号 Gradle专题 Groovy语言基础我们发现三引号(’’’ ‘’’)其实还可以换行,多行字符串也可以用三引号(’’’ ‘’’)来引用。不像 Java 一样我们如果字符串换行还需要用“ + 和 \n”连接起来。

2.1 字符串

字符串由字符组成,字符串在使用的时候会使用双引号(")或者单引号(')包裹。var str1 = '字符串';var str2 = "字符串";console.log(str1); // 输出:"字符串"console.log(str2); // 输出:"字符串"上述例子中,两个变量都是字符串类型的,可以双引号和单引号包裹的结果是一样的。但是如果需要在双引号包裹的字符串中使用双引号,或者在单引号包裹的字符串中使用单引号,需要使用\进行转义,否则会报错,因为 JavaScript 无法知道字符串的结束位置。var str1 = '使\'用\'单\'引\'号';var str2 = "使\"用\"双\"引\"号";console.log(str1); // 输出:"使'用'单'引'号"console.log(str2); // 输出:"使"用"双"引"号"// 以下代码会报错var str3 = "哼"!";var str4 = ''哼!';大部分开发者会使用单引号包裹字符串。因为为了网页的动态展示、复杂交互等,需要用 JavaScript 书写 HTML 模版,而 HTML 的属性按照习惯是使用双引号包裹的(XML 标准允许单引号和双引号,在 HTML5 的标准中甚至不需要书写引号)。这样如果使用 JavaScript 中的字符串表示 HTML 就会变成如下情况:var html = "<div class=\"title text-red\" style=\"display: inline-block;\">我是一个红色的标题</div>";为了契合书写 HTML 的习惯,防止代码中充斥的大量的转义,就会使用如下使用单引号的形式。var html = '<div class="title text-red" style="display: inline-block;">我是一个红色的标题</div>';

5.2 成员引用的基本语法

成员引用由类、双冒号、成员三个部分组成:

1. 简介

字符串类型的数据表示一段文本,使用单引号或者双引号创建:单引号字符串 ‘hello’双引号字符串 “world”在 python 中使用字符串的例子如下:>>> x = 'hello'>>> x'hello'>>> y = "world">>> y'world'在第 1 行,创建了使用单引号字符串 hello,并将值赋给变量 x 在第 2 行,显示变量 x 的值为 ‘hello’在第 3 行,创建了使用双引号字符串 world,并将值赋给变量 y 在第 4 行,显示变量 y 的值为 ‘world’使用单引号或者双引号创建的字符串只能在一行,而使用三引号允许一个跨多行的字符串。使用 3 个单引号创建的多行字符串示例如下:s = '''line 1line 2line 3'''print(s)使用 3 个双引号创建的多行字符串示例如下:s = """line 1line 2line 3"""print(s)以上程序的输出如下:line 1line 2line 3

2. 字符串转义

转义可以理解成字面意思,即转换字符的含义。比如想在字符串里描述换行符,就会使用 \n。var str = '第一行\n第二行\n第三行';console.log(str); // 将会输出换行的字符串通常转义字符都是通过 \ 开头的。同理,如果需要在双引号包裹的字符串中使用双引号,或者单引号包裹的字符串中使用单引号,就需要对引号进行转义。var str = '我'要'显'示'一'堆'单'引'号';这样就会报错,JavaScript 无法知道这些引号的含义。var str = '我\'要\'显\'示\'一\'堆\'单\'引\'号';通过 \n 表示一个单引号,就可以让 JavaScript 理解,需要在字符串里描述一个单引号。

2. 字符串

字符串类型的数据表示一段文本,使用单引号、双引号创建,例如:单引号字符串 ‘hello’双引号字符串 “hello”字符串通常用于文本的连接,例如:连接两个字符串,形成一个新的字符串>>> 'Hello' + 'World''HelloWorld'连接三个字符串,形成一个新的字符串>>> 'Hello' + ':' + 'World''Hello:World'

4. 字符串类型

双引号或者单引号表示字符串:let protagonist: string = "Sherlock Holmes"let partner: string = 'Dr. John Hamish Watson'使用模板字符串:let protagonist: string = 'Sherlock'let sentence: string = `华生是${protagonist}的朋友、助手和室友。`模板字符串使用反引号来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法 ${expression} 的占位符,占位符内可以写变量名,模板字符串会进行变量值的解析。

2.1 转义表

JavaScript 支持以下字符的转义: \' 单引号 \" 双引号 \& 和号 \\ 反斜杠 \n 换行符 \r 回车符 \t 制表符 \b 退格符 \f 换页符

3.2 赋值规范

变量与值直接使用 “=” 连接,等号两边不能存在空白字符;例如: dirname = "/tmp" 赋值方法就是错误的。如果值中有空白字符,使用单引号或双引号引起来,双引号对于其中引用的值将会根据其内容转化,单引号内的特殊字符则一律当字符串进行处理;例如:DIRNAME="$PATH" 的值为系统 PATH 实际的可执行文件路径,DIRNAME='$PATH' 的值为 $PATH 的字符串。可用 \ 来转译变量,让其变为一般字符;例如:DIRNAME=\$PATH 的值为 $PATH 的字符串。如果变量的值为指令,可用使用反撇号,或 $() 来引用;例如:下面两个是一样的 DATE=`date`DATE=$(date)在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来;例如:DIRNAME="/tmp"单纯数字的变量内容可以不加引号;例如:NUM=10

5.1 创建 jsonb 索引

jsonb 创建索引也十分简单,以上面的 movie 表为例:CREATE INDEX movie_info_gin_index ON movie USING gin(info);movie_info_gin_index是索引名称,gin(info)括号里面的 info 表示使用 movie 表中的 info 字段创建索引。

4. 类索引与父类索引

定义:类索引(this_class)和父类索引(super_class)都是一个 u2 大小的数据。类索引:确定当前类的全限定名。父类索引:确定当前类的父类的全限定名。Tips:由于 Java 单继承的原则,父类只可能有一个;由于 Object 是所有其他类的基类,所以除了 Object 类没有父类以外,其余所有类的 super_class 都不为空。无符号数结构示意图:类索引是紧跟在访问标志之后的结构,类索引后边紧跟的结构是父类索引。由于类索引与父类索引关系非常紧密,都是描述的当前类以及当前类的父类的全限定名,所以此处我们将二者放在一起进行讲解。

2.3 字符串

对于静态字符串一律使用单引号,不使用双引号。在拼接字符串的时候需要使用反引号的方式,更加易于阅读。// badconst name = "imooc";const info = name + ' ES6 Wiki';// goodconst name = 'imooc';const info = `${name} ES6 Wiki`;

1. 创建字符串

使用字符串字面量就可以创建字符串。var str1 = '';var str2 = "";以上例子创建了两个空字符串。字符串可以用单引号包裹,也可以用双引号包裹,效果是一样的。大部分前端程序员都会选择单引号,这么做的原因是为了契合 HTML 的书写习惯,拼接 HTML 的时候,HTML 元素的属性可以直接使用双引号包裹。var html = '<p class="tip">更多请<a href="/detail" target="_blank">了解详情</a></p>';如果换成双引号则需要转义:var html = "<p class=\"tip\">更多请<a href=\"/detail\" target=\"_blank\">了解详情</a></p>";

3.2 多行注释

以 # 开头的注释可以注释一行文本,Python 另外提供了注释多行文本的功能。多行注释用三个单引号 ‘’’ 或者三个双引号 “”" 将注释括起来,例如:使用3个单引号注释多行文本'''# 首先定义变量 x# 让后将变量 x 修改为 456x = 123x = 456'''使用3个双引号注释多行文本"""# 首先定义变量 x# 让后将变量 x 修改为 456x = 123x = 456"""

3.2 标签的属性

标签的属性,如果是标签为双标签,则属性写在头标签中(头标签的<>内), 如果是单标签,则写在标签的<>内。 <a href='https://www.baidu.com'>百度</a> <!-- 双标签的属性写在头标签的<>内 --> <img src='https://www.imooc.com/static/img/index/logo.png' alt='慕课logo'> <!-- 单标签的属性写在标签的<>内 -->总结:标签的属性有三部分构成,属性名,等号,属性值,等号左边的为属性名,等号右边的为属性值,属性值必须由引号引起来,单引号和双引号都可以。标签的属性用来给标签添加属性,让标签有特点的作用。

2.1 变量的定义

在使用 Shell 变量前,需要先定义变量,定义变量的方式有三种:2.1.1 直接赋值顾名思义就是直接将一个值赋值给一个变量名称,这种需要注意值中不能包含空白字符例如:正确的直接赋值变量:DIR=/tmp,其中 DIR 为变量名,/tmp 为值错误的直接赋值:STRING=hello Shell,其中 STRINNG 为变量名,hello Shell 为值,其中值包含了空白字符,这种赋值变量就是错误的。2.1.2 单引号赋值如果值中为普通字符,那么单引号赋值与双引号赋值没有区别,其可以包含空白字符,但是如果其中包含了变量的使用,那么单引号赋值方式为单引号里面的内容是什么就输出什么,此种赋值方式适用于不希望解析变量的场景,仅显示纯字符串。例如:[root@master ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@master ~]# DIR='$PATH'[root@master ~]# echo $DIR$PATH[root@master ~]# DATE='$(date)'[root@master ~]# echo $DATE$(date)PATH 为 linux 系统内置的一个环境变量,DIR 为我们定义的变量,值为单引号引起来的 $PATH,查看其内容也为 $PATH,同理对于执行 date 命令。2.1.3 双引号赋值与单引号赋值一样,其也可以包含空白字符,但是与单引号赋值不同的是,双引号赋值可以解析引号内的变量或执行命令,即不是将双引号中的变量名和命令原样输出,而是解析其中变量的内容,然后进行输出。例如:[root@master ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@master ~]# DIR="$PATH"[root@master ~]# echo $DIR/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@master ~]# DATE="$(date)" [root@master ~]# echo $DATE Sun Mar 8 22:13:57 CST 2020可以通过与单引号示例对照查看,双引号赋值解析了 PATH 变量的值然后输出,同理对于执行命令 date。

2.1 块引用

在 Markdown 文件中,用「大于号」开头的行会被转换为块引用。实例 1:这是一段普通的文本内容。“一支穿云箭,千军万马来相见;两副忠义胆,刀山火海提命现。” —— 星仔其默认渲染效果如下实例 2:在行首加入「大于号 >」,将其改变为块引用。> “一支穿云箭,千军万马来相见;两副忠义胆,刀山火海提命现。” —— 星仔其修改后渲染效果如下:实例 3:如果需要在块引用内的换行,可以在行尾增加两个连续的空格。> 一支穿云箭,千军万马来相见; > 两副忠义胆,刀山火海提命现。 > —— 星仔其渲染效果如下:实例 4:这一写法还可以简化成只在第一行加入引用符号。> 一支穿云箭,千军万马来相见; 两副忠义胆,刀山火海提命现。 —— 星仔其渲染效果与以前一样:实例 5:如果需要在块引用里分段,只要在块引用内增加由块引用符号开启的空行即可。> 一支穿云箭,千军万马来相见;>> 两副忠义胆,刀山火海提命现。>> —— 星仔其渲染结果如下:块引用会被渲染成 html 的 blockquote 标签:<blockquote><p>"一支穿云箭,千军万马来相见;两副忠义胆,刀山火海提命现。" —— 星仔</p></blockquote>

5.3 成员引用的使用场景

成员引用最常见的使用方式就是类名+双冒号+成员(属性或函数):fun main(args: Array<String>) { val persons = listOf(Person(name = "imooc1", age = 18), Person(name = "imooc2", age = 20), Person(name = "imooc3", age = 16)) println(persons.maxBy(Person::age))//成员引用的类型和maxBy传入的lambda表达式类型一致}省略类名直接引用顶层函数:package com.imooc.lambdafun salute() = print("imooc")fun main(args: Array<String>) { run(::salute)}成员引用用于扩展函数:fun Person.isChild() = age < 18fun main(args: Array<String>){ val isChild = Person::isChild println(isChild)}

5. 接口索引计数器与接口索引集合

父类索引后边紧跟的是接口索引计数器,接口索引计数器后边紧跟的是接口索引集合。类似于常量池计数器和常量池的关系,接口索引计数器记录的是接口索引集合中接口索引的数量。Tips:对于常量池计数器和常量池,一个是无符号数类型,一个是表类型。相比而言,接口索引计数器和接口索引集合皆为无符号数类型,这里学习者可以进行对比记忆。我们继续来看下两者的定义以及无符号数类型的结构示意图。定义:接口索引计数器:代表了接口索引集合中接口的数量;接口索引集合:按照当前类 implements(或当前接口extends)的接口的顺序,从左到右依次排列在接口索引集合中,此部分集合称为接口索引集合。无符号数结构示意图:接口索引计数器和接口索引集合均为无符号数类型结构,结构示意图如下图所示。从图中可以看出,接口索引计数器占用了 2 个字节,为 u2 大小,接口索引集合中的每一个接口元素占用了 2 个字节大小,也为 u2 大小。Tips:接口索引集合后边紧跟的数据结构是什么?我们继续抛出问题,后续章节会有问题的解答,让我们带着问题继续探究 Class 文件结构。

5. 注意事项

在 echo 变量引用时,我们推荐勤用引号,单引号为原样输出字符串,双引号为输出变量的值;printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植更好,如果后期考虑平台移植问题,建议使用 printf。

3.2 编写自定义代码块

将下面的代码粘贴到代码块文件的右侧区域。实例:"uImooc": { "body": [ "<view class=${1:imooc1/imooc2/imooc3}>", "\t<view class=\"imooc4\">", "\t$0", "\t</view>", "</view>" ], "prefix": "uimooc", "project": "uni-app", "scope": "source.vue.html"}Tips:要注意代码块的最外层有一对大括号,所有的代码块都要包裹在这个大括号中;多个代码块之间要用英文逗号隔开;body 配置项中,每一行都要用双引号包围,并用逗号分隔。代码中出现双引号使用"转义,或者使用单引号代替。缩进需要用 \t 表示,不能直接输入缩进或空格。

5. 次版本号与主版本号

学前疑问:学习者可能会有疑问,为什么标题说的是次版本号与主版本号,次版本号在前,而主版本号在后呢?先次后主,是不是读起来感觉有点别扭呢?疑问解答:特别强调下,对于Class 文件结构,第一部分为 u4 的魔数,魔数后边紧跟的就是 u2 的次版本号,次版本号后边才是 u2 的主版本号,此处需要特别注意,从结构上来说,次版本号在前,主版本号在后。定义:次版本号与主版本号共同标识了我们所使用的的 JDK 版本,如 JDK 1.8.0 版本的次版本号为 u2 大小,用字节码表示为 00 00,主版本号也是 u2 大小,用字节码表示为 00 34。次版本号:JDK 版本的小版本号;主版本号:JDK 版本的大版本号。Tips:如果 Class 文件的开头 8 个字节分别为 CA FE BA BE 00 00 00 34,那么我们可以确定,这是一个 JVM 可识别的 Class 文件,且使用的 JDK 1.8.0的版本进行的编译,因为前4个字节魔数为 CA FE BA BE 符合标准,后4 个字节 00 00 00 34 为 JDK 1.8.0的版本。无符号数结构示意图:前文提到,次版本号与主版本号也是无符号数类型的数据。我们接下来看下魔数的示意图:Tips:至此我们了解了先次后主,了解了次版本号与主版本号分别占用 2 个字节,无符号数表示为 u2。同时我们从整体上了解了,魔数后边为次版本号,次版本号后边为主版本号。主版本号后边紧跟的是什么?不要着急,我们继续学习。版本号对照表:开篇的前言部分已经说过,对照表部分为了解内容,这里简单举出几个版本的对照表,了解一下即可。JDK 版本16进制字节码1.8.000 00 00 341.7.000 00 00 331.6.000 00 00 321.5.000 00 00 31

1.4 字符串

字符串就是由一些列的字符用双引号包围。例如:Tips:这里的双引号(" ")是在英文输入法下输入的引号,不是中文输入法中的引号。这点在系统中同时有中文和英文输入法的环境下很容易引起错误。"hello world!""This is a lesson for C language."

9. 配置项引用

Spring Boot 配置项是可以引用其他配置项的值的,这个稍微提一下,例如:实例:# wxmp.properties# 公众号的appidwxmp.appid=111# 公众号的secret,值为111222wxmp.secret=${wxmp.appid}222

8. CSV 存储引擎

逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

2. 字符串对象创建的方法

创建字符串对象的方法有很多种,最常用的创建方式是使用字符串文字:单引号或双引号之间的字符序列。两种形式之间的区别是 Ruby 在构造文字时对字符串进行的处理量。

2.2 信号

信号(Signal)是 Unix 系统中就已有的 IPC 方式,继承于 Unix 的 Linux 系统和 MacOS 系统也具有相同的通信方式。信号的工作原理是向某个进程发送特定的消息,目标进程在收到消息之后,就知道特定事件已经发生,此时进程可以忽略消息即不做处理,或者是处理消息调用固定的函数。以 MacOS 为例,在 shell 终端输入 kill -l 可以列出支出的全部信号名称:HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP。MacOS 支持的信号列表

首页上一页1234567下一页尾页
直播
查看课程详情
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号