Mixins와 Traits의 차이점은 무엇입니까?
Wikipedia에 따르면 Ruby 모듈은 일종의 특성과 비슷합니다. 어떻게 요?
Mixins와 Traits의 차이점은 무엇입니까?
Wikipedia에 따르면 Ruby 모듈은 일종의 특성과 비슷합니다. 어떻게 요?
답변:
ad 1. 믹스 인에서 인스턴스 변수를 정의 할 수 있습니다. 특성은 이것을 허용하지 않습니다. 상태는 클래스를 작성하여 제공해야합니다 (= 특성을 사용하는 클래스).
ad 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'
}
}
믹스 인에서 작성 클래스의 충돌은 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 프로그래밍 언어의 차이점을 설명합니다.
이 컨텍스트의 믹스 인은 코드를 즉석에서 생성 한 다음 컴파일하는 동안 코드의 해당 지점에 삽입됩니다. 간단한 DSL에 매우 편리합니다.
특성은 외부 소스에서 생성 된 코드가 아니라 컴파일 타임 외부 값입니다. 차이점은 미묘합니다. 믹스 인은 로직을 추가하고, 특성은 컴파일 타임 유형 정보와 같은 데이터를 추가합니다.
루비에 대해 잘 모르지만 이것이 도움이되기를 바랍니다.