[SCALA] 스칼라의 "마법"기능 목록
SCALA스칼라의 "마법"기능 목록
어디에서 + = 등과 같은 적용, 적용 취소, 업데이트, 스칼라의 "마법"함수의 목록을 찾을 수 있습니까?
마법 기능에 의해 나는 예를 들어 컴파일러의 일부 문법 설탕 사용하는 기능을 의미
o.update(x,y) <=> o(x) = y
나는 스칼라 마법과 기능의 동의어의 조합에 대한 인터넷 검색,하지만 난 아무것도 찾지 못했습니다.
나는 표준 라이브러리의 마법 기능의 사용에 관심이 아니지만,있는 마법 기능이 존재합니다.
해결법
-
==============================
1.내가 아는 한:
내가 아는 한:
게터 / 세터 관련 :
apply update identifier_=
패턴 일치 :
unapply unapplySeq
대한-함축 :
map flatMap filter withFilter foreach
접두사 운영자 :
unary_+ unary_- unary_! unary_~
그 외에도, B. 스칼라에 대한 어떠한 암시도 A A로
= B로 변환한다 = A B, 전 연산자가 정의되지 않은 경우, "OP"는 영숫자없고, = 아니다! = == <= 또는> =. 그리고 스칼라의 문법 설탕이 모두 나와있는 한 곳이있다 생각하지 않습니다.
-
==============================
2.업데이트 및 적용 또한, 마법의 자격 (내가 믿는) 단항 연산자의 숫자도 있습니다 :
업데이트 및 적용 또한, 마법의 자격 (내가 믿는) 단항 연산자의 숫자도 있습니다 :
에 추가하는 (거의 모든 것을 할 수있다) 당신은 자신에게 완벽한 패키지를 가지고 일반 중위 / 접미사 연산자.
당신은 정말 스칼라 언어 사양에서 살펴 보셔야합니다. 그것은이 물건의 유일한 권위있는 소스입니다. 그것은 하드가 (당신이 문맥 자유 문법에 익숙해있어만큼) 읽고, 아주 쉽게 검색하는 것이 아니다. 그것은 잘 지정하지 않는 유일한 것은 XML 지원이다.
-
==============================
3.죄송합니다 정확히 당신의 질문에 대답하지,하지만 내가 좋아하는 WTF 순간 지금까지 할당 연산자 내부의 패턴 일치로 @ 경우. "스칼라 프로그래밍"의 소프트 카피 덕분에 나는 꽤 빨리 무엇인지 알게되었습니다.
죄송합니다 정확히 당신의 질문에 대답하지,하지만 내가 좋아하는 WTF 순간 지금까지 할당 연산자 내부의 패턴 일치로 @ 경우. "스칼라 프로그래밍"의 소프트 카피 덕분에 나는 꽤 빨리 무엇인지 알게되었습니다.
우리 @ 사용하면 변수에 패턴의 어떤 부분을 결합 할 수 있으며, 패턴 일치가 성공하면, 변수는 하위 패턴의 값을 캡처합니다. 다음은 스칼라 프로그래밍의 예입니다 (제 15.2 - 변수 바인딩은) :
expr match { case UnOp("abs", e @ UnOp("abs", _)) => e case _ => }
그리고 여기 프로그래밍 스칼라 그것에 대해 말씀입니다.
그 링크는 더 이상 작동하지 않습니다. 여기 않는 것입니다.
-
==============================
4.또한 매개 변수의 임의의 수 등에 패턴 매칭을 위해 * _ 추가 할 것
또한 매개 변수의 임의의 수 등에 패턴 매칭을 위해 * _ 추가 할 것
case x: A(_*)
그리고 운영자 연관성 규칙, Odersky - 넓적 Venners 책에서 :
어쩌면 우리는 여기에서 찾을 수 있습니다 표현식의 구문 desugaring을 언급해야한다
쌍 그리고 (물론!), 대체 문법
a -> b //converted to (a, b), where a and b are instances
(정확하게 지적했듯이, 아마 자격이 없습니다 그래서이 사람은 라이브러리를 통해 이루어 단지 암시 적 변환은,하지만, 나는 이민자를위한 공통의 퍼즐 게임입니다 찾기)
-
==============================
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.나는 또한 "마법"특성이 있음을 추가 할 - 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");
from https://stackoverflow.com/questions/1483212/list-of-scalas-magic-functions by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스칼라 컬렉션 맵 작업에서 올바른 모음 형식을 반환 할 수 있습니다? (0) | 2019.11.13 |
---|---|
[SCALA] 지도 별 키에 컬렉션을 돌려 스칼라 가장 좋은 방법은? (0) | 2019.11.13 |
[SCALA] 어떻게 스칼라의 방법을 프로파일 링하는? (0) | 2019.11.13 |
[SCALA] 스칼라가 명시 적으로 의존하는 유형을 지원하지 않는 이유 모든 이유? (0) | 2019.11.13 |
[SCALA] 스칼라에서 일부 기능을 사용하여 - 그것은 어떻게 작동합니까? (0) | 2019.11.13 |