[SCALA] 스칼라에서,는 "초기 초기화"무엇인가?
SCALA스칼라에서,는 "초기 초기화"무엇인가?
전문가 라이브러리 디자이너 섹션에서 스칼라 프로그래머 능력의 수준에 대한 마틴 오더 스키의 최근 게시물에서 그는 용어는 "초기 초기화"를 포함하고 있습니다.
이들은 스칼라 프로그래밍에 언급되지 않습니다. 그들은 무엇인가?
해결법
-
==============================
1.초기 초기화는 슈퍼 클래스 전에 실행하기위한 것입니다 서브 클래스의 생성자의 일부입니다. 예를 들면 :
초기 초기화는 슈퍼 클래스 전에 실행하기위한 것입니다 서브 클래스의 생성자의 일부입니다. 예를 들면 :
abstract class X { val name: String val size = name.size } class Y extends { val name = "class Y" } with X
코드 대신 같은 기록 된 경우
class Z extends X { val name = "class Z" }
크기는 초기화의 정상적인 순서에 이름 전에 초기화되기 때문에 다음 널 포인터 예외가, Z가 초기화되었다 때 발생하는 것 (슈퍼 클래스 전).
-
==============================
2.지금까지 내가 말할 수있는, (위의 링크에 주어진) 동기는 다음과 같습니다
지금까지 내가 말할 수있는, (위의 링크에 주어진) 동기는 다음과 같습니다
. 위의 예에서 X2는 겉으로는 모든 점에서 정의하지만 그래서 "는 발를 오버라이드 (override)하는 자연적 때, 그것은 두 번 이상 초기화되지 않으며,이 경우되지 않습니다 : 재정의 된 발은 상위 클래스의 건설 중에 널 (null)로 나타납니다, 추상적 인 발 것이다있다. "
이 모든 자연 왜 표시되지 않습니다. 그것은 완전하게 가능하다 그 r.h.s. 할당의 부작용이있을 수 있습니다. 이러한 코드 구조는 C ++ 또는 Java 중 하나를 완전히 불가능합니다 (그리고 내가 그 언어에 대해 말할 수 있지만 나는 스몰 토크를 생각합니다). 사실 당신은 생성자를 통해 그 언어로 듀얼 지정이 ... ticilpmi ... 암시 명시해야한다. r.h.s. 비추어 양도를 통해 슈퍼 부작용을 회피 할 수있는 능력 (따라서 슈퍼 클래스 불변 무효화) : 부작용의 불확실성, 정말 전혀 동기 부여의 대부분은 아닌 것 같아? 싫어지기!
이러한 안전하지 않은 코드 구조를 허용하는 다른 "킬러"동기가 있습니까? 왜 지금 그것을 포함, (당신이 언어의 창조로부터 계산하면, 30여 년) 객체 지향 언어는 약 40 년 동안 이러한 메커니즘없이 짓을 한거야?
그것은 ... 그냥 ... 위험 ... 보인다.
-
==============================
3.제 생각에, 년 후 ...
제 생각에, 년 후 ...
이것은 단지 케이크입니다. 말 그대로.
아니 초기 아무거나. 그냥 케이크 (유지 mixin).
케이크는 그랜드 만들어 낸 용어 / 패턴, 클래스와 인터페이스의 중간 인 스칼라의 특성 시스템을 사용 하나를 자신을 푸우 - 바하. 그것은 자바의 장식 패턴보다 훨씬 낫다.
소위 "인터페이스"단지 익명의 기본 클래스이며, 무엇을 사용하면 기본 클래스 (나는 솔직히 할 수 몰랐) 형질의 역할을 할 수 있습니다. 는 "with'd"클래스 (특성은 할 수 없습니다) 인수를 할 수 그것을 시도하고 다시보고 있다면 그것은 나에게 명확하지 않다.
이 질문의 답은 스칼라의 멋진 기능 중 하나에 강화하고있다. 거기에 최대 읽기 및 경외합니다.
from https://stackoverflow.com/questions/4712468/in-scala-what-is-an-early-initializer by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 개의 행의 값을 추출하는 스파크 (0) | 2019.10.30 |
---|---|
[SCALA] 값이 할당보다는 단위로 평가 스칼라 할당에 대한 동기는 무엇입니까? (0) | 2019.10.30 |
[SCALA] JVM은 로컬 호스트의 IP 주소를 해결하는 데 시간이 오래 걸립니다 (0) | 2019.10.30 |
[SCALA] 무엇 스칼라의 매니페스트이며, 당신이 그것을 할 때 필요합니까? (0) | 2019.10.30 |
[SCALA] 어떻게 표준 스칼라 클래스를 사용하여 스칼라에서 JSON을 구문 분석? (0) | 2019.10.30 |