2010-06-18 3 views
17

스칼라 어원은 매우 강력합니다. Scala의 새롭고 고유 한 기능이거나 다른 프로그래밍 언어에 이미 존재하는 개념인지 궁금합니다."스칼라 (a scala)"를 지원하는 다른 프로그래밍 언어

감사합니다.

편집 :

내 질문을 명확히하기 위해, 그래, 나는이 구체적인 구현에 대해 이야기하고있다. "암시적인 것들"을 처음부터 이상하게 보였지만 잠시 동안 사용하고 다른 사람들이 그것을 어떻게 사용하는지 보았을 때, 그것이 얼마나 잘 작동하는지 감탄했습니다.

+0

내 생각에 암시 적 메서드와 암시 적 값을 구별해야한다고 생각합니다. 언어가 그 중 하나만 지원할 가능성이 매우 높습니다. 물론 두 가지 모두가 이미 언급 한 "유형 클래스의 시뮬레이션"솔루션과 같은 가능성을 열어줍니다.이 솔루션은 실질적으로 스마트 한 조합입니다. –

+0

암시 적 변환과 암시 적 값/매개 변수를 모두 지칭하기 위해 * implicits *라는 단어를 사용하고 있습니다. 스칼라 컨텍스트에서는 "정상적인"해석이라고 생각하지만 어쩌면 틀 렸습니다. – gerferra

+0

@ 대니얼 많은 감사합니다!메모와 메시지를 삭제하는 질문을 편집했습니다. 다시 한번 감사드립니다. – gerferra

답변

14

는 영감 하스켈의 타입 클래스처럼 보인다. 적어도 하나의 블로그 기사는 그 사람이 implicits have their origin in Haskell type classes라고 주장한다. 이 기사는 Martin Odersky의 2006 년 논문 Poor Man's Type Classes을 참조합니다. 그리고 Daniel Sobral은 simulate type classes with implicits에 관한 최근 기사를 썼습니다.

+0

사실 나를 더 인상 깊게하는 것들 중 하나는 'Ordering'과'Numeric'에서 사용 된 * 타입 클래스의 것들입니다. 참조 주셔서 감사합니다! – gerferra

+6

Implicits는 유형 클래스보다 훨씬 일반적입니다. 예를 들어, 암시 적 매개 변수를 컴파일러에서 채우지 않고 명시 적으로 전달하도록 선택할 수 있습니다. 하스켈에서 typeclasses는 항상 컴파일러에 의해 수행됩니다. –

1

"implicits"문구를 얼마나 넓게 펼쳐야하는지에 따라 다릅니다. 스칼라에 대한 함축적 인 이유 중 하나는 본질적으로 기존 클래스에 메소드를 추가하는 것입니다 (액세스 할 권한이없는 경우). 스몰 토크 (Smalltalk), 루비 (Ruby), 오브젝티브 -C (Objective-C)와 같이 다른 구조를 통해 다른 언어로도 가능합니다.

1

나는 http://patricklogan.blogspot.com/2007/06/scala-implicits.html에서 implicits를 올바르게 이해하고 있다면이를 지원하는 여러 언어가 있습니다.

가장 좋은 예는 C# 확장 메서드입니다. 내가 그들을 사용한 최근 예제 :

종종 두 개의 Point 사이의 거리 계산을해야했습니다. Point 다른 지점까지의 거리를 계산할 수있는 방법이없는 것은 그래서 난 내 프로젝트에 다음 코드를 추가 :

그때 할 수
class MyPointExtension 
{ 
    public static Double GetDistance(this Point p1, Point p2) 
    { 
    return /* the pythagoras code */ 
    } 
} 

는 수행

Point unitPosition = new Point(x,y); 
Point target = new Point(x2,y2); 
Double distance = unitPosition.GetDistance(target); 
+8

스칼라 implicits는 C# 확장 메서드보다 강력합니다. Odersky의 말로 "* [in C#] 클래스에 필드 또는 인터페이스가 아닌 메소드 만 추가 할 수 있습니다"*. http://www.artima.com/weblogs/viewpost.jsp?thread=179766 – gerferra

+5

@ german1981에 동의합니다. 확장 메소드는 스칼라 함수에 대한 용도 중 하나이지만, implicits 자체의 메커니즘은 없습니다. –

1

Scala implicits만큼 강력하지는 않지만 C++에는 이미 암시 적 유형 변환을 초래할 수있는 변환 연산자와 복사 생성자가 있습니다. 이진 연산자를 정의하는 능력 (Scala가 허용하지 않는 것)과 함께 Scala implicits의 힘을 전달했습니다.

5

implicit parameters을 소개 한 2000 년도 프로그래밍 란 니스 란 (Principles of Programming Lanages : POPL)에서 정말 좋은 논문이 나왔습니다. 그들은 Haskell에서 구현되었습니다. Scala의 디자이너 Martin Odersky가이 작업을 알고 있었음을 확신합니다. (마틴은 POPL의 빈번하고 환영받는 참여자이며 POPL의 기고자입니다.)

관련 문제