-
06-09-2019 - |
문제
믹스 인과 특성의 차이점은 무엇입니까?
Wikipedia에 따르면, 루비 모듈은 일종의 특성과 비슷합니다. 어떻게?
해결책
- 믹스 인은 상태를 포함 할 수 있으며 (전통적인) 특성은 그렇지 않습니다.
- Mixins는 "암시 적 갈등 해결"을 사용하고 특성은 "명시 적 갈등 해결"을 사용합니다.
- 믹스 인은 선형화에 의존하고 특성은 평평합니다.
AD 1.Mixins에서는 인스턴스 변수를 정의 할 수 있습니다. 특성은 이것을 허용하지 않습니다. 상태는 클래스를 작성하여 제공해야합니다 (= 특성을 사용하여 클래스)
AD 2.이름 충돌이있을 수 있습니다. 2 개의 믹스 딘 (MA
그리고 MB
) 또는 특성 (TA
그리고 TB
) 동일한 정의로 메소드를 정의하십시오 foo():void
.
Mixin MA {
foo():void {
print 'hello'
}
}
Mixin MB {
foo():void {
print 'bye'
}
}
Trait TA {
foo():void {
print 'hello'
}
}
Trait TB {
foo():void {
print 'bye'
}
}
Mixins에서는 수업을 작성하는 데있어 충돌이 발생합니다 C mixins MA, MB
암시 적으로 해결됩니다.
Class C mixins MA, MB {
bar():void {
foo();
}
}
이것은 전화 할 것입니다 foo():void
~에서 MA
반면에 특성을 사용하는 동안 클래스를 작곡하는 것은 갈등을 해결해야합니다.
Class C mixins TA, TB {
bar():void {
foo();
}
}
이 코드는 충돌을 일으킬 것입니다 (두 가지 정의 foo():void
).
AD 3.방법의 의미는이 방법이 특성 또는 특성을 사용하는 클래스에서 정의되어 있는지 여부에 의존하지 않습니다.
다시 말해, 클래스가 특성으로 구성되거나 특성 코드가 클래스에 "사본 - 붙여 넣기"입니다.
다른 팁
이 페이지는 D 프로그래밍 언어의 차이점을 설명합니다.
이 맥락에서 Mixins는 즉시 코드로 생성 된 다음 해당 시점에서 컴파일 중에 코드를 삽입합니다. 간단한 DSL에 매우 편리합니다.
특성은 외부 소스에서 생성 된 코드 대신 컴파일 타임 외부 값입니다. 차이는 미묘합니다. Mixins는 논리를 추가하고 특성은 컴파일 타임 유형 정보와 같은 데이터를 추가합니다.
루비에 대해 많이 모르지만 이것이 다소 도움이되기를 바랍니다.