복붙노트

[SCALA] 스칼라 문자 식별자에 대한 설명이 필요 (역 따옴표)

SCALA

스칼라 문자 식별자에 대한 설명이 필요 (역 따옴표)

스칼라 2 판에서 프로그래밍을 읽고 난이 건너 온 :

문자 식별자 "아이디어는 역 따옴표 사이의 식별자로 런타임에 의해 허용있어 임의의 문자열을 넣을 수 있다는 것입니다"

내가 이것을 사용하는 것이 왜 나는 완전히 확실하지 않다? 이 책은 자바의 스레드 클래스의 정적 수율 방법을 액세스하는 사용 사례를했다.

나는 역 따옴표와 수율을 사용하는 경우 그래서 스칼라 때문에, 수율은, 예비 단어

Thread.`yield`()

그것은 스칼라의 수율을 무시하고 나를 대신 자바의 스레드 클래스의 방법 수율에 액세스 할 것인가?

사전에 감사합니다.

해결법

  1. ==============================

    1.바로 그거죠. 역 따옴표를 사용하면 더 많거나 적은 필드 식별자에 어떤 이름을 지정할 수 있습니다. 사실, 당신도 말할 수있다

    바로 그거죠. 역 따옴표를 사용하면 더 많거나 적은 필드 식별자에 어떤 이름을 지정할 수 있습니다. 사실, 당신도 말할 수있다

    val ` ` = 0
    

    어떤 이름을 가진 변수 (공백의 한 문자)를 정의합니다.

    식별자의 문자 적 ​​정의는 두 개의 경우에 유용합니다. 첫 번째 경우가 스칼라에서 같은 이름의 예약어는 이미 당신이 그것에 대해 걱정하지 않는 자바 라이브러리를 사용해야 할 때, (물론, 왜해야한다).

    다른 사용 사례의 경우 문이 함께 제공됩니다. 협약의 소문자 이름은 대문자 이름 외측 범위 식별자를 참조하는 반면, 변수에 일치하는 참조이다. 그래서,

    val A = "a"
    val b = "b"
    "a" match {
      case b => println("b")
      case A => println("A")
    }
    

    인쇄 "b"를 (컴파일러가 충분히 벙어리 인 경우에 경우 A는 연결할 수없는 말을 실패하지). 당신이 원래 정의 발 B를 참조 할 경우, 당신은 마커로 역 따옴표를 사용해야합니다.

    "a" match {
      case `b` => println("b")
      case A => println("A")
    }
    

    어떤 "A"를 인쇄합니다.

    꺾쇠 괄호이 최근 질문 방식의 고급 사용하는 경우가 있습니다 추가 (<>)를 역 따옴표가 (그 자체에 약간의 '마법'구문을 사용합니다) 세터 방법에 대한 코드를 소화에 컴파일러를 얻기 위해 필요했던 곳.

  2. ==============================

    2.그것은 나를 AKKA의 문서에서 아래의 코드를 이해하는 데 도움이 당신에게 @Debilski 감사합니다

    그것은 나를 AKKA의 문서에서 아래의 코드를 이해하는 데 도움이 당신에게 @Debilski 감사합니다

    class WatchActor extends Actor {
        val child = context.actorOf(Props.empty, "child")
        ...
        def receive = {
            ...
            case Terminated(`child`) ⇒ ...
        }
    }
    

    경우 :

    case Terminated(`child`)
    

    ActorRef 필드 종료 유형의 메시지와 일치하는 것은 이전에 정의 된 아이 같다.

    이 문장으로 :

    case Terminated(c)
    

    우리는 C에 매핑 ActorRef의 참조 모든 종료 메시지를 일치합니다.

  3. from https://stackoverflow.com/questions/6576594/need-clarification-on-scala-literal-identifiers-backticks by cc-by-sa and MIT license