什么是 YAML

YAML 是一种数据序列化语言,通常用于编写配置文件。YAML 代表另一种标记语言或YAML 不是标记语言(递归首字母缩写词),YAML 通常用于数据,而不是文档。YAML 还是一种流行的编程语言,因为它易于阅读且易于理解。它还可以与其他编程语言结合使用。

什么是 KCL

Kusion 配置语言 (KCL)是一种开源的基于约束的记录以及函数语言。KCL 通过成熟的编程语言技术和实践改进大量复杂配置的编写,致力于围绕配置构建更好的模块化、可扩展性和稳定性,更简单的逻辑编写、快速的自动化和良好的生态扩展性。

您可以使用 KCL 来

KCL 语言与 YAML 的字符串有什么区别

1. YAML 字符串使用单引号和双引号的区别是什么?

  • YAML 双引号字符串是唯一能够表达任意字符串的样式,通过使用 \ 转义字符,比如使用 \" 转义双引号 ",使用 \\ 转义反斜杠 \,并且可以使用单个反斜杠 \ 作为双引号字符串的续行符
  • YAML 单引号字符串与 YAML 双引号字符串不同的是可以自由地使用 \ 和 " 而不需要转义,但是使用两个单引号 '' 转义单引号 ' 字符

比如对于如下的例子,三个字符串变量的内容是相同的

string1: 'here '' s to "quotes"'
string2: "here's to \"quotes\""
string3: here's to "quotes"

因此,KCL 输出 YAML 字符串的策略是当字符串内容出现单引号时,优先输出无引号字符串或双引号字符串,其他情况输出单引号字符串以避免理解上的负担。

更多细节可参考: YAML 规范 v1.2

2. YAML 中出现的 | - + > 等符号是什么含义?

在使用 KCL 多行字符串(使用三引号括起来的字符串),输出的 YAML 经常会携带一些特殊的记号,如 |,-,+ 和 > 等,这些记号通常为 YAML 多行字符串的表示方法,比如对于如下 KCL 代码:

data = """This is a KCL multi line string (the first line)
This is a KCL multi line string (the second line)
This is a KCL multi line string (the third line) """
var = 1

输出 YAML 为:

data: |+
This is a KCL multi line string (the first line)
This is a KCL multi line string (the second line)
This is a KCL multi line string (the third line) var: 1
  • | 表示块字符串样式,用于表示一个多行字符串,其中的所有换行符都表示字符串真实的换行;
  • > 表示块折叠样式,在其中所有的换行符将被空格替换;
  • + 和 - 用于控制在字符串末尾使用换行符的情况。默认情况为字符串末尾保留单个换行符,如果要删除所有换行符,可以在样式指示符 | 或 > 后面放置一个 - 来完成,如果要保留末尾的换行符,则需要在 | 或 > 后面放置一个 +

更多细节可参考: YAML 多行字符串 和 YAML 规范 v1.2

3. YAML 中在 | - + > 等符号之后出现的数字是什么含义?

数字表示 YAML 当中的显式缩进指示符。对于 YAML 中的长字符串,YAML 通常第一个非空行确定字符串的缩进级别,而当第一个非空行前面具有非前导字符时,比如换行符,YAML 要求必须使用显式缩进指示符来指定内容的缩进级别,比如 |2 和 |1 等

比如对于如下 KCL 代码:

longStringStartWithEndline = """
This is the second line
This is the third line
"""
longStringStartWithEndline: |2

  This is the second line
This is the third line

如果不需要长字符串开头的空行或换行符,则可以以如下两种方式进行 KCL 长字符串书写

  • 长字符串从第 1 行开始书写
longString = """This is the second line
This is the third line
"""
  • 使用续行符
longString = """\
This is the second line
This is the third line
"""

以上两种方式输出的 YAML 均为:

longString: |
This is the second line
This is the third line

更多细节可参考: YAML 规范 v1.2

KCL 语言和 YAML 字符串的区别是什么?一文完全解答的更多相关文章

  1. C语言和C++篇

    C语言和C++篇 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的.想想我们至今的代码,到底生成和使用了多少String!标题上所罗列的语言,可以看成 ...

  2. c语言和java的区别

    今晚读了一下c程序设计语言,这是一本经典书籍,发现C语言和java有很多是相同的,毕竟java是由c语言进化来的. 我大概从我自己的思考来谈谈不同点 1.c语言是面向过程,主要单位是函数,变量和函数的 ...

  3. CHENGDU1-Python编程语言和PEP8规范

    CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...

  4. 从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇

    转自: http://www.cnblogs.com/wenjiang/p/3266305.html 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的 ...

  5. OWL本体语言和Protege本体编辑器

    OWL本体语言和Protege本体编辑器 演讲稿原作者:Wala Abdulaziz译者:Wu Di (pimgeek)转载.编辑:Tan Liwei原文发布日期:2013年6月5号原文链接:http ...

  6. 很多人都搞不清楚C语言和C++的关系!今天我们来一探究竟为大家解惑~

    最近,身边有许多小伙伴已经开始学习编程了,但是呢,学习又会碰到许多的问题,其中作为新手小白提到最多的问题就是编程语言的选择. 每次遇到这种问题,看起来很简单,但是又有很多小伙伴搞不清编程语言之间的关系 ...

  7. C语言和C++中动态申请内存

      在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h>  ...

  8. 大数据工具比较:R 语言和 Spark 谁更胜一筹?

    本文有两重目的,一是在性能方面快速对比下R语言和Spark,二是想向大家介绍下Spark的机器学习库 背景介绍 由于R语言本身是单线程的,所以可能从性能方面对比Spark和R并不是很明智的做法.即使这 ...

  9. Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较

    Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f " ...

  10. c语言和java以及安卓和苹果

    苹果手机是本地,没有中间环节,速度快,基于Linux系统 安卓是通过虚拟机,影响速度 就像c语言和java c适用于架构小的地方,因为直接编译运行 而java用于架构比较大的地方,启动慢,启动之后效率 ...

随机推荐

  1. JavaScript:立即执行函数

    想象一下,如果我希望某个代码块,只执行一次,就不再执行,应该怎么办? 代码块肯定是用函数来表示,执行肯定是调用函数,但是确保只执行一次,该怎么办? 我们为什么可以多次调用函数,因为函数名指向了函数的内 ...

  2. 前后端开发必会的 HTTP 协议“十全大补丸”(万字长文)

    本文全面介绍了 HTTP 协议相关知识,包括 HTTP 请求报文.响应报文.持久连接.缓存.Cookie 以及 HTTP 版本升级等! HTTP 协议全称为 HyperText Transfer Pr ...

  3. LeetCode-03 无重复字符的最长子串(Longest Substring Without Repeating Characters)

    题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 示例  1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &qu ...

  4. CF803G Periodic RMQ Problem

    简要题意 你需要维护一个序列 \(a\),有 \(q\) 个操作,支持: 1 l r x 将 \([l,r]\) 赋值为 \(x\). 2 l r 询问 \([l,r]\) 的最小值. 为了加大难度, ...

  5. (13)go-micro微服务公用函数开发

    目录 一 前言 二 SwapTo 通过json tag 进行结构体赋值 三 UserForResponse 类型转化 四 最后 一 前言 在utils目录中新建一个swap.go文件 swap.go中 ...

  6. vue中 beforeRouteLeave 生命周期函数

    beforeRouteLeave需求描述在使用 element-UI的table 的时候,有这么一个需求.从一个页面切换到另一个页面,再切回来的时候,滚动条的位置不变. 需求:滚动浏览列表页,出现滚动 ...

  7. MRS_MounRiver安装与驱动相关问题汇总

    解决问题如下: MounRiver下载与安装 若MounRiver某些功能不全或插件没安装 MounRiver下载与安装 MRS官网下载:http://www.mounriver.com/downlo ...

  8. MyBatis-Plus修改数据,会不会把其他字段置为null

    前两天在用MyBatis-Plus写了一张单表的增删改查,在写到修改的时候,就突然蹦出一个奇怪的想法. MyBatis-Plus的BaseMapper中有两个关于修改的方法.如下: int updat ...

  9. 五、pycharm的安装与基本使用

    目录 一.pycharm的安装 1.软件介绍 2.正版安装 1.下载软件 2.安装软件 3.其他方法安装(需要先下载相关资源) ①无限试用法 ②傻瓜式激活法 ③淘宝购买 二.pycharm软件的使用 ...

  10. Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

    前情提要 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置 概述 在分析 K8S 集 ...