[SCALA] 스칼라 2.10에서 문자열 보간 - 어떻게 문자열 변수를 보간하는?
SCALA스칼라 2.10에서 문자열 보간 - 어떻게 문자열 변수를 보간하는?
문자열 보간 스칼라 스칼라 2.10부터 가능합니다
이것은 기본적인 예입니다
val name = "World" //> name : String = World
val message = s"Hello $name" //> message : String = Hello World
동적 보간을 할 수있는 방법, 예를 들어이 궁금 해서요 다음 (단지 설명을 위해, 컴파일되지 않습니다)
val name = "World" //> name : String = World
val template = "Hello $name" //> template : String = Hello $name
//just for illustration:
val message = s(template) //> doesn't compile (not found: value s)
해결법
-
==============================
1.의 사실 (암시 적 StringContext에서 변환 할 수 있습니다 또는 무언가) StringContext의 방법이다. 때 쓰기
의 사실 (암시 적 StringContext에서 변환 할 수 있습니다 또는 무언가) StringContext의 방법이다. 때 쓰기
whatever"Here is text $identifier and more text"
컴파일러로를 desugars
StringContext("Here is text ", " and more text").whatever(identifier)
기본적으로 StringContext는, 추력, 원시 * 방법을 제공합니다.
당신이 볼 수 있듯이, 컴파일러 자체가 이름을 선택합니다과 방법을 제공합니다. 이 컴파일시에 발생하기 때문에, 당신은 현명 동적으로 할 수 없어 - 컴파일러는 런타임에 변수 이름에 대한 정보를 가지고 있지 않습니다.
당신은 당신이 원하는 값을 교환 할 수 있도록하지만, 바르를 사용할 수 있습니다. 이 같은 게임을 재생할 수 있도록 기본의 메소드는 (예상대로) 객체의 toString
class PrintCounter { var i = 0 override def toString = { val ans = i.toString; i += 1; ans } } val pc = new PrintCounter def pr[A](a: A) { println(s"$pc: $a") } scala> List("salmon","herring").foreach(pr) 1: salmon 2: herring
(이미 0이 예에서 REPL로 불렸다).
그것은 당신이 할 수있는 최선에 관하여이다.
* 원료가 끊어지고 2.10.1까지 고정 될 예정되지 않는다; 변수 전에 텍스트 만은 (아무 이스케이프 처리) 실제로 원시입니다. 그래서 2.10.1 아웃 될 때까지 하나를 사용하여 보류 또는 소스 코드를보고 자신을 정의합니다. 기본적으로, 그래서 자신을 정의하는 것은 매우 간단합니다, 탈출 처리가 없다.
-
==============================
2.여기에 원래의 질문의 맥락에서 # 1에 대한 가능한 해결책은 렉스의 훌륭한 답변에 따라입니다
여기에 원래의 질문의 맥락에서 # 1에 대한 가능한 해결책은 렉스의 훌륭한 답변에 따라입니다
val name = "World" //> name: String = World val template = name=>s"Hello $name" //> template: Seq[Any]=>String = <function1> val message = template(name) //> message: String = Hello World
-
==============================
3.그 ID가 암시 적 클래스를 통해 소개 사용자 정의 보간 될 수 있습니다. 문서는 JSON 보간에 대한 예를 제공합니다
그 ID가 암시 적 클래스를 통해 소개 사용자 정의 보간 될 수 있습니다. 문서는 JSON 보간에 대한 예를 제공합니다
implicit class JsonHelper(val sc: StringContext) extends AnyVal { def json(args: Any*): JSONObject = { ... } }
-
==============================
4.지역 변수의 이름은 실행 시간에 사용할 수 없습니다 - 디버그 기호로 주변에 유지 될 수뿐만 아니라 박탈 된 수 있습니다 : 이것은 현재 구현에서 본질적으로 불가능하다. (멤버 변수의 이름은,하지만 당신이 여기 설명하는지 아니다).
지역 변수의 이름은 실행 시간에 사용할 수 없습니다 - 디버그 기호로 주변에 유지 될 수뿐만 아니라 박탈 된 수 있습니다 : 이것은 현재 구현에서 본질적으로 불가능하다. (멤버 변수의 이름은,하지만 당신이 여기 설명하는지 아니다).
from https://stackoverflow.com/questions/13260864/string-interpolation-in-scala-2-10-how-to-interpolate-a-string-variable by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라에서리스트에 요소를 추가합니다 (0) | 2019.11.16 |
---|---|
[SCALA] 스칼라 : foldLeft 대 배 (0) | 2019.11.16 |
[SCALA] 어떻게 스칼라 mutable.Map에 immutable.Map을 변환 할 수 있습니까? (0) | 2019.11.16 |
[SCALA] 동적 스칼라 2.11 런타임에 스칼라 클래스 파일을 컴파일 (0) | 2019.11.16 |
[SCALA] 밀봉 특성의 서브 클래스를 얻기 (0) | 2019.11.16 |