일반 함수

Generic function

컴퓨터 프로그래밍에서, 일반적 함수다형성에 대해 정의된 함수다.

정적으로 입력된 언어

정적으로 입력된 언어(C++, 자바 등)에서, 일반함수라는 용어는 컴파일 시간 다형성(정적 파견), 특히 파라메트릭 다형성(parametric polymorism)을 위한 메커니즘을 말한다.이들은 형식 파라미터로 정의되며, 컴파일된 시간 유형 정보로 해결되도록 의도된 기능이다.컴파일러는 이러한 유형을 사용하여 적절한 버전을 인스턴스화하여 기능 과부하를 적절하게 해결한다.

Common Lisp Object 시스템

CLOS(Common Lisp Object System)[1]Dylan과 같은 객체 지향 프로그래밍을 위한 일부 시스템에서는, 일반적인 함수는 동일한 이름을 가진 모든 방법으로 구성된 실체다.일반적으로 일반 함수함수표준 개체로부터 모두 상속되는 클래스의 인스턴스다.따라서 일반적 함수는 함수(논제로 호출하여 인수에 적용할 수 있음)와 일반 객체 둘 다이다.Metaobject Protocol의 Art of the Metaobject Protocol》은 CLOST 일반 기능의 구현과 사용을 상세히 설명한다.

Lisp에 대한 초기 객체 지향 프로그래밍 확장 중 하나는 Freats이다.스몰토크의 영향을 받는 일반적인 메시지 송신 패러다임을 이용했다.메시지를 보내는 Freats 구문은 다음과 같다.

 (보내다 반대하다 :message) 

New Treams에서는 메시지를 실제 함수로 하고 일반적인 함수 호출 구문을 사용해야 한다고 결정했다.

 (메세지 반대하다) 

현재 메시지는 그 자체로 일반적 함수, 객체, 함수다.메시지를 개별적으로 구현하는 것을 메서드라고 한다.

같은 생각이 CommonLoops에서도 구현되었다.[2]Common Lisp Object System에는 New Treams와 CommonLoops가 주된 영향을 끼쳤다.

커먼 리스프

두 개의 매개 변수 개체-1과 개체-2로 일반 함수를 정의하십시오.일반 함수의 이름이 충돌한다.

 (유전적 충돌하다 (객체-1 물체-2)) 

일반 함수에 속하는 방법들은 클래스 밖에서 정의된다.여기서는 소행성(첫 번째 매개변수 객체-1)과 우주선(두 번째 매개변수 객체-2) 등급에 특화된 일반적인 기능 충돌 방법을 정의한다.매개변수는 메소드 본문 내에서 정규 변수로 사용된다.클래스 슬롯에 액세스할 수 있는 특별한 네임스페이스는 없다.

 (수법을 어기다 충돌하다 ((객체-1 소행성) (물체-2 우주선))    (형식을 갖추다 t "asteroid ~a는 우주선과 충돌한다 ~a" 객체-1 물체-2)) 

일반 함수 호출:

? (충돌하다 (가공의 'asteroid) (가공의 'spaceship)) 소행성 #<아스테로이드> 4020003FD3> 충돌시키다 와 함께 우주선 #< 스페이스십 40200048CB> 

Common Lisp은 또한 일반 기능에서 개별 방법을 검색할 수 있다.FIND-Method는 범용함수의 방법을 소행성우주선에 특화된 충돌로 찾아낸다.

? (찾아내다 #'충돌하다 못을 박다 (리스트를 작성하다 (초급형의 'asteroid) (초급형의 'spaceship))) #<표준-메소드> 충돌 NIL (소행성 우주선) 4150015E43> 

다른 언어와 비교

일반적인 함수는 스몰토크 용어의 방법에 대략 대응하는데, 스몰토크에서는 수신자의 클래스가 코드 본문이 호출되는 유일한 결정요인 즉, 인수의 유형이나 값이 무관함(단일 디스패치)이라는 주목할 만한 예외는 있다.일반적인 함수가 호출될 때 다중 디스패치가 있는 프로그래밍 언어에서 메서드 디스패치는 특권적인 것만이 아니라 모든 인수에 기초하여 발생한다.뉴 플레이스 또한 일반적인 기능을 제공했지만 단 한 번의 디스패치만 제공했다.

참조

  1. ^ Common Lisp Object 시스템:개요
  2. ^ "CommonLoops, Merging Lisp and Object-Oriented Programming" (PDF). Archived from the original (PDF) on 2011-06-04. Retrieved 2009-12-10.