【问题标题】:Are line breaks in raw strings platform-dependent?原始字符串中的换行符是否依赖于平台?
【发布时间】:2017-10-21 09:04:02
【问题描述】:

原始字符串中的换行符是否依赖于平台?

val a = "one\ntwo";

val b = """one
two"""

println(a == b)

换句话说,上面的println 语句是否保证打印true

【问题讨论】:

    标签: string kotlin cross-platform line-breaks rawstring


    【解决方案1】:

    很遗憾,我找不到任何具体说明这一点的消息来源。感觉应该是文档中的内容。

    然而,IntelliJ 中有将原始字符串转换为普通字符串的意图操作。我认为可以安全地假设此操作不应更改代码的含义(或者如果确实如此,则应将其归档为错误)。如果您在其中包含换行符的原始字符串上尝试此操作,您会看到它用 \n 字符替换了换行符。

    您可以看到动作 here 的来源,并对其进行测试,期望它将换行符转换为 \n here (before)here (after)


    编辑:here 对有关原始字符串的问题的评论(据我了解)指出原始字符串中包含 \n 行结尾。

    【讨论】:

      【解决方案2】:

      我不会认为它保证ab 是相等的。 Spec 对原始字符串文字有这样的说法:

      Kotlin 有两种类型的字符串文字:其中可能包含转义字符的转义字符串和可以包含换行符和任意文本的原始字符串。

      1. 规范并没有说是一样的
      2. 规范区分“换行符”和“任意文本”
      3. 在@zsmb13 指向 Kotlin 讨论的链接中,Kotlin 工程师说编译器不会在原始字符串 (??) 中保留换行符。

      所以,如果我要编写跨平台工作的代码,我会很明确(至少在它们明确之前)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多