gpt4 book ai didi

string - Scala:如何获得字符串的转义表示?

转载 作者:行者123 更新时间:2023-12-03 10:49:21 28 4
gpt4 key购买 nike

基本上,我想做的是:

 // in foo.scala
val string = "this is a string\nover two lines"
println(string)
println(foo(string))

做这个:
% scala foo.scala
this is a string
over two lines
"this is a string\nover two lines"

基本上是在寻找 ruby​​ 的类似物 String#inspect或 haskell 的 show :: String -> String .

最佳答案

这个问题有点老了,但我在自己寻找解决方案时偶然发现了它,并且对其他答案不满意,因为它们要么不安全(自己替换东西)要么需要外部库。

我找到了一种使用安全的 scala 标准库(> 2.10.0)获取字符串的转义表示的方法。它使用了一个小技巧:

通过运行时反射,您可以轻松获得文字字符串表达式的表示。当调用 toString 时,这种表达式的树作为(几乎)scala 代码返回。方法。这尤其意味着文字以它在代码中的方式表示,即转义和双引号。

def escape(raw: String): String = {
import scala.reflect.runtime.universe._
Literal(Constant(raw)).toString
}
escape因此,函数会产生所提供原始字符串的所需代码表示(包括周围的双引号):
scala> "\bHallo" + '\n' + "\tWelt"
res1: String =
?Hallo
Welt

scala> escape("\bHallo" + '\n' + "\tWelt")
res2: String = "\bHallo\n\tWelt"

诚然,该解决方案滥用了反射 api,但恕我直言,它仍然比其他提议的解决方案更安全、更易于维护。

关于string - Scala:如何获得字符串的转义表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com