首页 > 其他分享 >KCL 语言和 YAML 字符串的区别是什么?一文完全解答

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

时间:2023-03-03 20:12:09浏览次数:56  
标签:KCL YAML second 字符串 line 换行符

什么是 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,second,字符串,line,换行符
From: https://www.cnblogs.com/peefy/p/17176832.html

相关文章

  • 字符串格式化
    字符串格式化占位符:%s一般称字符串中的%s叫占位符,而占位符被替换的过程叫字符串格式化在字符串后面紧跟%(“替换第一个%s位置”,”替换第二个%s的位置”),就会把......
  • 3.3 C提高 指针 字符串
    扩展1.指针变量和它指向的内存块是两个不同的概念指针(本身也有东西)~内容点击查看代码注意//写内存时,一定要确保内存可写 char*buf2="sadgkdsjlgjlsdk";//文......
  • 如何从字符串末尾删除子字符串?
    我有以下代码:url='abcdc.com'print(url.strip('.com'))我期望:abcdc我有:abcd现在我做url.rsplit('.com',1)有没有更好的办法?请参阅.strip/.rstrip/.l......
  • 如何用许多字符串值初始化字符串列表 (List<string>)
    如何初始化(使用C#初始化程序)字符串列表?我试过下面的例子,但它不起作用。List<string>optionList=newList<string>{"AdditionalCardPersonAddressType","A......
  • PHP 常见字符串函数
    1、字符串格式化1、trim():删除字符串两端的空格或其他预定义字符2、rtrim():删除字符串右边的空格或其他预定义字符3、ltrim():删除字符串左边的空格或其他预定义......
  • 去字符串前后空格
    //202210CJS如果不存在trim函数(部分IE),则手动追加属性if(typeofString.prototype.trim==='undefined'){String.prototype.trim=function(){......
  • json字符串转Map集合
    /***json字符串转list*@paramjsonStr*@return*/publicstaticList<Map<String,Object>>GetJsonListByString(StringjsonStr){List<Map<String,Obje......
  • Json数组形式的字符串转为Map数组 Map集合的几种遍历方式
    //Json数组形式的字符串转为Map数组StringstrArr="[{"name":"xx","age":"16"},{"name":"yy","age":"18"}]";//第一种方式List<Map<String,String>......
  • 字符串和字符串函数(二)
    2.字符串输入如果要把一个字符串读入程序,必须先预留存储该字符串的空间,然后用输入函数获取该字符串。2.1分配空间预先分配空间则意味着必须为字符串分配足够使用的空间大小,......
  • 345. 反转字符串中的元音字母
    编写一个函数,以字符串作为输入,反转该字符串中的元音字母。 示例1:输入:"hello"输出:"holle"示例2:输入:"leetcode"输出:"leotcede"     classSolution......