복붙노트

[SCALA] 스칼라의 "마법"기능 목록

SCALA

스칼라의 "마법"기능 목록

어디에서 + = 등과 같은 적용, 적용 취소, 업데이트, 스칼라의 "마법"함수의 목록을 찾을 수 있습니까?

마법 기능에 의해 나는 예를 들어 컴파일러의 일부 문법 설탕 사용하는 기능을 의미

o.update(x,y) <=> o(x) = y

나는 스칼라 마법과 기능의 동의어의 조합에 대한 인터넷 검색,하지만 난 아무것도 찾지 못했습니다.

나는 표준 라이브러리의 마법 기능의 사용에 관심이 아니지만,있는 마법 기능이 존재합니다.

해결법

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

    1.내가 아는 한:

    내가 아는 한:

    게터 / 세터 관련 :

    apply
    update
    identifier_=
    

    패턴 일치 :

    unapply
    unapplySeq
    

    대한-함축 :

    map
    flatMap
    filter
    withFilter
    foreach
    

    접두사 운영자 :

    unary_+
    unary_-
    unary_!
    unary_~
    

    그 외에도, B. 스칼라에 대한 어떠한 암시도 A A로 = B로 변환한다 = A B, 전 연산자가 정의되지 않은 경우, "OP"는 영숫자없고, = 아니다! = == <= 또는> =.

    그리고 스칼라의 문법 설탕이 모두 나와있는 한 곳이있다 생각하지 않습니다.

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

    2.업데이트 및 적용 또한, 마법의 자격 (내가 믿는) 단항 연산자의 숫자도 있습니다 :

    업데이트 및 적용 또한, 마법의 자격 (내가 믿는) 단항 연산자의 숫자도 있습니다 :

    에 추가하는 (거의 모든 것을 할 수있다) 당신은 자신에게 완벽한 패키지를 가지고 일반 중위 / 접미사 연산자.

    당신은 정말 스칼라 언어 사양에서 살펴 보셔야합니다. 그것은이 물건의 유일한 권위있는 소스입니다. 그것은 하드가 (당신이 문맥 자유 문법에 익숙해있어만큼) 읽고, 아주 쉽게 검색하는 것이 아니다. 그것은 잘 지정하지 않는 유일한 것은 XML 지원이다.

  3. ==============================

    3.죄송합니다 정확히 당신의 질문에 대답하지,하지만 내가 좋아하는 WTF 순간 지금까지 할당 연산자 내부의 패턴 일치로 @ 경우. "스칼라 프로그래밍"의 소프트 카피 덕분에 나는 꽤 빨리 무엇인지 알게되었습니다.

    죄송합니다 정확히 당신의 질문에 대답하지,하지만 내가 좋아하는 WTF 순간 지금까지 할당 연산자 내부의 패턴 일치로 @ 경우. "스칼라 프로그래밍"의 소프트 카피 덕분에 나는 꽤 빨리 무엇인지 알게되었습니다.

    우리 @ 사용하면 변수에 패턴의 어떤 부분을 결합 할 수 있으며, 패턴 일치가 성공하면, 변수는 하위 패턴의 값을 캡처합니다. 다음은 스칼라 프로그래밍의 예입니다 (제 15.2 - 변수 바인딩은) :

    expr match {
      case UnOp("abs", e @ UnOp("abs", _)) => e
      case _ =>
    }
    

    그리고 여기 프로그래밍 스칼라 그것에 대해 말씀입니다.

    그 링크는 더 이상 작동하지 않습니다. 여기 않는 것입니다.

  4. ==============================

    4.또한 매개 변수의 임의의 수 등에 패턴 매칭을 위해 * _ 추가 할 것

    또한 매개 변수의 임의의 수 등에 패턴 매칭을 위해 * _ 추가 할 것

    case x: A(_*)
    

    그리고 운영자 연관성 규칙, Odersky - 넓적 Venners 책에서 :

    어쩌면 우리는 여기에서 찾을 수 있습니다 표현식의 구문 desugaring을 언급해야한다

    쌍 그리고 (물론!), 대체 문법

    a -> b //converted to (a, b), where a and b are instances
    

    (정확하게 지적했듯이, 아마 자격이 없습니다 그래서이 사람은 라이브러리를 통해 이루어 단지 암시 적 변환은,하지만, 나는 이민자를위한 공통의 퍼즐 게임입니다 찾기)

  5. ==============================

    5.그들은 스칼라 언어 사양에 정의되어 있습니다. 당신이 언급 한 바와 같이 지금까지 내가 아는 한, 단 세 "마법"함수가 있습니다.

    그들은 스칼라 언어 사양에 정의되어 있습니다. 당신이 언급 한 바와 같이 지금까지 내가 아는 한, 단 세 "마법"함수가 있습니다.

    Scalas 게터와 세터 또한 "마법"관련 될 수있다 :

    scala> class Magic {
     |     private var x :Int = _
     |     override def toString = "Magic(%d)".format(x)
     |     def member = x
     |     def member_=(m :Int){ x = m }
     | }
    
    defined class Magic
    
    scala> val m = new Magic
    
    m: Magic = Magic(0)
    
    scala> m.member
    
    res14: Int = 0
    
    scala> m.member = 100
    
    scala> m
    
    res15: Magic = Magic(100)
    
    scala> m.member += 99
    
    scala> m
    
    res17: Magic = Magic(199)
    
  6. ==============================

    6.나는 또한 "마법"특성이 있음을 추가 할 - scala.Dynamic를 :

    나는 또한 "마법"특성이 있음을 추가 할 - scala.Dynamic를 :

    당신은 같은 물건을 할 수 있습니다

    import scala.language.dynamics
    
    object Dyn extends Dynamic {
      def applyDynamic(name: String)(a1: Int, a2: String) {
        println("Invoked " + name + " on (" + a1 + "," + a2 + ")");
      }
    }
    
    Dyn.foo(3, "x");
    Dyn.bar(3, "y");
    
  7. from https://stackoverflow.com/questions/1483212/list-of-scalas-magic-functions by cc-by-sa and MIT license