使用插值器 S 的 Scala 字符串格式化不起作用

scala string formatting with interpolator S not working

我是 scala 的新手,正在尝试进行一些字符串格式化。

val mAPRegisterResponseMessage = s"{\" 'type' \": \"ap_register_response\",  
 \"message_id\": 02,\"register_status\": $registerStatus,\"host_name_type\": 
 $host_name_type, \"host_name\": $host_name, \"port_num\":$port_num }"

如果我删除了开头的 s ,那么字符串文字就形成了,但显然不正确。但是在开始添加 s 之后,我得到一个错误,因为第二个反斜杠是 unclosed character literal。 我究竟做错了什么?任何线索都会有所帮助。

您可以使用三引号:

s""" {"foo" : 2, "bar": $registerStatus} """

Scala 控制台:

scala> val registerStatus = "new"
registerStatus: String = new

scala> s""" {"foo" : 2, "bar": $registerStatus} """
res0: String = " {"foo" : 2, "bar": new} "

解决方案 1:三引号 (""")

如@mgosk 所述

s""" {"foo" : 2, "bar": $registerStatus} """

解决方案 2:JSON 库

您似乎想要创建 JSON 输出。对于该用例,使用字符串插值不是首选解决方案。有许多库,例如 JSON4s http://json4s.org/ 允许您使用类型安全的大小写 class 并将其呈现为 JSON 字符串

Scala 中的字符串插值不适用于使用 \ 的转义。特殊字符的情况下可以使用"""

val mAPRegisterResponseMessage = s"""{" 'type' ": "ap_register_response", "register_status": $registerStatus }"""