V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
peefy
V2EX  ›  程序员

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

  •  
  •   peefy · 2023-03-03 20:05:37 +08:00 · 683 次点击
    这是一个创建于 629 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是 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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:18 · PVG 05:18 · LAX 13:18 · JFK 16:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.