2011-02-27 7 views
1

Scala에서 프로토 타입 기반 프로그래밍을 수행 할 수 있습니까?Scala에서 프로토 타입 기반 프로그래밍을 할 수 있습니까?

+0

당신의 질문은 명확하지 않습니다. 질문을 더 정확하게 묘사 해 주실 수 있습니까? 스칼라가 Io 나 JavaScript와 같은 프로토 타입 기반 언어인지 여부를 알고 싶다면 대답은 '아니오'입니다. 스칼라에는 새로운 객체에 대한 청사진 인 클래스가 있으며 필수입니다. 따라서 그러한 청사진 없이는 객체를 생성 할 수 없습니다. – tenshi

답변

2

EasyAngel에 동의하는 동안 프로토 타입 메커니즘을 사용하는 방법에 따라 Scala 메커니즘을 사용하여 비슷한 목표를 달성 할 수 있습니다. 예를 들어,보다 일반적인 클래스와 혼합 될 수있는 특성을 정의 할 수 있습니다.

잠재적으로 관련성이 높은 다양한 특성을 혼합하고 일치시킬 수 있기 때문에 어떤면에서는 프로토 타입 개체 생성보다 강력합니다. 대상 하위 클래스에서 사용자 정의하고 확장 할 수도 있습니다.

질문을 명확히하면 더욱 집중된 대답이 허용됩니다.

+0

제 견해로는 프로토 타입 기반 언어의 대부분이 클래스가 없거나 좋아하는 것에서 비롯됩니다. 이 흥미로운 InfoQ 비디오는이 주제와 관련이 있다고 생각합니다. [클래스는 조기에 최적화되었습니다] (http://www.infoq.com/presentations/Classes-Are-Premature-Optimization). 나는 [autoproxy 스칼라 컴파일러 플러그인] (https://github.com/scala-incubator/autoproxy-plugin) (동적 혼합으로 참조 될 수도 있음)이이 경우에 더 적합 할 수 있다고 생각합니다. – tenshi

+0

프리젠 테이션과 소프트웨어 설명 모두에 감사드립니다. 그러나 우리는 둘 다 필요합니다. 이상적인 (추상적 인) 유형화와 원형 (경험적) 일반화는 각각 개념적 (그리고 표현 적) 경제에 기여한다. 어떻게 한 사람의 결여가 다른 사람의 공헌에 기여합니까? – Situagent

+1

쉬운 천사는 누구입니까? –

3

필자는 Easy Angel에 동의해야합니다 ... 스칼라 객체에는 클래스가 필요하지 않습니다 (여전히 모든 유형이 있지만 ... 동일하지는 않습니다). 그것의 이러한 개체에 대한 기능을 쓸 수있는 구조 입력에

또한
val martin = new { 
    val name = "Martin" 
    val surname = "Ring" 
    def age = Calendar.getInstance.get(Calendar.YEAR) - 1986 
} 

감사 쓰기 완벽하게 확인 :

def printPerson(person: { def name: String; def age: Int }) = 
    println("%s (%d)".format(person.name, person.age)) 

printPerson(martin)를 호출 할 수 있습니다 그것은에 대한 Martin (25)

그래서 필요를 출력하지 않습니다 클래스 또는 특성을 원하는 경우

그러나 익명 형식의 개체를 복제하고 확장 할 수 없기 때문에 프로토 타입 기반 프로그래밍은 언어에서 지원되지 않습니다 (imho). 나는 당신이 할 수있는 함수를 작성할 수 있다고 생각합니다 ... 그러나 그들은 반사의 방대한 사용을 요구할 것이고 따라서 기본 lanugage 지원이 없습니다. ..

+1

easyangel은 누구인가요? –