KCL 语言和 YAML 字符串的区别是什么?一文完全解答
什么是 YAML
YAML 是一种数据序列化语言,通常用于编写配置文件。YAML 代表另一种标记语言或YAML 不是标记语言(递归首字母缩写词),YAML 通常用于数据,而不是文档。YAML 还是一种流行的编程语言,因为它易于阅读且易于理解。它还可以与其他编程语言结合使用。
什么是 KCL
Kusion 配置语言 (KCL)是一种开源的基于约束的记录以及函数语言。KCL 通过成熟的编程语言技术和实践改进大量复杂配置的编写,致力于围绕配置构建更好的模块化、可扩展性和稳定性,更简单的逻辑编写、快速的自动化和良好的生态扩展性。
您可以使用 KCL 来
- 生成 JSON、YAML 等静态配置数据或与现有数据集成。
- 使用 Schema 建模减少配置数据中的样板文件。
- 为配置数据定义规则约束并自动验证它们。
- 通过梯度自动化方案无副作用地组织、简化、统一和管理大型配置。
- 使用隔离的配置块以可扩展的方式管理大型配置。
- 用作平台工程编程语言,通过Kusion Stack交付现代应用程序。
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 字符串的区别是什么?一文完全解答的更多相关文章
- C语言和C++篇
C语言和C++篇 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的.想想我们至今的代码,到底生成和使用了多少String!标题上所罗列的语言,可以看成 ...
- c语言和java的区别
今晚读了一下c程序设计语言,这是一本经典书籍,发现C语言和java有很多是相同的,毕竟java是由c语言进化来的. 我大概从我自己的思考来谈谈不同点 1.c语言是面向过程,主要单位是函数,变量和函数的 ...
- CHENGDU1-Python编程语言和PEP8规范
CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...
- 从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇
转自: http://www.cnblogs.com/wenjiang/p/3266305.html 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的 ...
- OWL本体语言和Protege本体编辑器
OWL本体语言和Protege本体编辑器 演讲稿原作者:Wala Abdulaziz译者:Wu Di (pimgeek)转载.编辑:Tan Liwei原文发布日期:2013年6月5号原文链接:http ...
- 很多人都搞不清楚C语言和C++的关系!今天我们来一探究竟为大家解惑~
最近,身边有许多小伙伴已经开始学习编程了,但是呢,学习又会碰到许多的问题,其中作为新手小白提到最多的问题就是编程语言的选择. 每次遇到这种问题,看起来很简单,但是又有很多小伙伴搞不清编程语言之间的关系 ...
- C语言和C++中动态申请内存
在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h> ...
- 大数据工具比较:R 语言和 Spark 谁更胜一筹?
本文有两重目的,一是在性能方面快速对比下R语言和Spark,二是想向大家介绍下Spark的机器学习库 背景介绍 由于R语言本身是单线程的,所以可能从性能方面对比Spark和R并不是很明智的做法.即使这 ...
- Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较
Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f " ...
- c语言和java以及安卓和苹果
苹果手机是本地,没有中间环节,速度快,基于Linux系统 安卓是通过虚拟机,影响速度 就像c语言和java c适用于架构小的地方,因为直接编译运行 而java用于架构比较大的地方,启动慢,启动之后效率 ...
随机推荐
- element-ui中table组件的表格嵌套Select,table中使用select
在table组件中,有一个<template slot-scope="scope"></template>,这个模板有一个slot-scope属性,这个属性 ...
- JavaScript:变量:如何声明变量?
声明变量可以用下面几种方式: 但是这几种声明方式肯定是有区别的,主要是上面三种方式的区别,这需要结合window对象和作用域来说明,这里不赘述. 声明变量的时候,推荐使用let,这是ES6新推出的更好 ...
- sql根据团队树一级一级汇总统计
1.需求描述 最近碰到了一个需求,是要统计各个团队的员工的销售金额,然后一级一级向上汇总. 编辑 架构团队树是类似于这种样子的,需要先算出每个员工的销售金额,然后汇总成上一级的团队金额,然后各个 ...
- Redis-01 常用命令
创建和获取 key 命令 说明 例子 set 创建一个名为 key 值为 value 键值对 set views 10 get 获取名为 key 的值,存在返回值,不存在返回 nil get view ...
- 题解 P5607 [Ynoi2013] 无力回天 NOI2017
简要题意 其实我觉得这个部分可以不要,因为这道题的题面还是很清晰的. 你需要维护一个数据结构,支持区间异或和区间求与 \(v\) 的最大异或和. 思路 对于这种区间问题,最容易想到的就是 分块 线段树 ...
- C# 托管堆 遭破坏 问题溯源分析
一:背景 1. 讲故事 年前遇到了好几例托管堆被损坏的案例,有些运气好一些,从被破坏的托管堆内存现场能观测出大概是什么问题,但更多的情况下是无法做出准确判断的,原因就在于生成的dump是第二现场,借用 ...
- 基于Docker安装的Stable Diffusion使用CPU进行AI绘画
基于Docker安装的Stable Diffusion使用CPU进行AI绘画 由于博主的电脑是为了敲代码考虑买的,所以专门买的高U低显,i9配核显,用Stable Diffusion进行AI绘画的话倒 ...
- 【Python】bytes和hex字符串之间的相互转换
十六进制字符串:a="CC DD 01 61 F6 01 00 64 A4 81 00 00 00 8B" b=bytes.fromhex(a) 转为字节 from socket ...
- SQL Case条件判断SQL
问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据.使用select case when if 来做条件查询判断 CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-th ...
- 10月25日内容总结——正则表达式相关知识与re模块
目录 一.正则表达式前戏 二.正则表达式内容介绍 1.字符组 2.特殊符号 3.量词 4.贪婪匹配与非贪婪匹配 贪婪匹配 非贪婪匹配 5.转义符 6.正则表达式实战建议与一些例子 建议 例子 三.re ...