原始字符串中的换行是否依赖于平台?
原始字符串中的换行是否依赖于平台?
val a = "one\ntwo"; val b = """one two""" println(a == b)
换句话说,上面的println
语句是否保证打印是否true
?
不幸的是,我找不到具体说明这一点的任何消息来源。 这感觉就像应该在文档中的东西。
然而,IntelliJ中的意图动作将原始字符串转换为普通字符串。 我认为应该是安全的,假设这个行为不应该改变你的代码的含义(或者如果它,那应该作为一个错误提交)。 如果你在一个带有换行符的原始字符串上试试这个,你可以看到它用\n
字符替换了换行符。
你可以在这里看到这个动作的来源,以及对它的测试,希望它能够在这里(之前)和这里(之后)将换行符转换为\n
。
编辑: 这里是一个关于原始字符串的问题的评论(据我所知)说,一个原始字符串有\n
行尾在它。
我不认为它保证a
和b
是平等的。 Spec对于原始字符串文字有这样的说法:
Kotlin有两种类型的字符串文字:转义字符串,可能有转义字符和可以包含换行符和任意文本的原始字符串。
- 规范并没有说这是一样的
- 规范对“新行”和“任意文本”进行区分
- 在Kotlin讨论的@ zsmb13链接中,一位Kotlin工程师说编译器不会保留原始字符串中的换行符(??)。
所以,如果我编写的代码跨平台工作,我会明确的(至少在他们之前)。