문제

믹스 인과 특성의 차이점은 무엇입니까?

Wikipedia에 따르면, 루비 모듈은 일종의 특성과 비슷합니다. 어떻게?

도움이 되었습니까?

해결책

  1. 믹스 인은 상태를 포함 할 수 있으며 (전통적인) 특성은 그렇지 않습니다.
  2. Mixins는 "암시 적 갈등 해결"을 사용하고 특성은 "명시 적 갈등 해결"을 사용합니다.
  3. 믹스 인은 선형화에 의존하고 특성은 평평합니다.

특성에 대한 강의

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 프로그래밍 언어의 차이점을 설명합니다.

http://dlang.org/mixin.html

http://dlang.org/traits.html

이 맥락에서 Mixins는 즉시 코드로 생성 된 다음 해당 시점에서 컴파일 중에 코드를 삽입합니다. 간단한 DSL에 매우 편리합니다.

특성은 외부 소스에서 생성 된 코드 대신 컴파일 타임 외부 값입니다. 차이는 미묘합니다. Mixins는 논리를 추가하고 특성은 컴파일 타임 유형 정보와 같은 데이터를 추가합니다.

루비에 대해 많이 모르지만 이것이 다소 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top