2016-08-16 3 views
1

나는 scala을 처음 사용하며 일부 문자열 서식 지정을 시도합니다.인터폴 레이터 S가 작동하지 않는 스칼라 문자열 포맷

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를 추가하면 두 번째 백 슬래시에 대해 닫히지 않은 문자 리터럴으로 오류가 발생합니다. 내가 뭘 잘못하고 있니? 모든 단서가 도움이 될 것입니다.

+0

일부 배경은 https://issues.scala-lang.org/browse/SI-6476입니다. 그것은 고쳐지지 않을 것 같습니다. –

답변

2

당신은 트리플 인용 사용할 수 있습니다

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

스칼라 콘솔 :

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

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

그러면 $ registerStatus가 값으로 바뀝니 까? 삼중 따옴표를 사용하면 모든 문자열 교체가 손실 될 것이라고 생각했습니다. 내가 시도하고 확인하자. – vishal

+0

문자열 교체가 정상적으로 작동합니다. 그냥 백 슬래시 문자 – mgosk

0

해결 방법 1 : 삼중 따옴표 (""")

을 이미 @mgosk

s""" {"foo" : 2, "bar": $registerStatus} """ 
에 의해 언급

그래서 lution 2 : JSON 라이브러리

JSON 출력을 만들고 싶습니다. 문자열 보간법을 사용하는 usecase가 바람직한 해결책이 아닙니다. typesafe case 클래스를 사용하여 JSON 문자열로 렌더링 할 수있는 JSON4s http://json4s.org/과 같은 라이브러리가 많이 있습니다.

+0

예를 사용하지 마십시오. 그것이 내가 시도 할 다음 단계입니다. 하지만 이것은 정말로 빠르게 작동 할 것이라고 생각하는 해킹 코드 였지만이 간단한 형식에 필요한 시간이 길어졌습니다 (: - – vishal

+0

나는 불행한 말을 할 것입니다 :(지난 6 년 동안이 문제를 스칼라로 다루지 않았습니다.) JSON4s 고 말했다. –

0

\을 사용하여 이스케이프 할 때 문자열 보간이 제대로 작동하지 않습니다. 특수 문자의 경우 """을 사용할 수 있습니다.

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