42.2. PL/토토 캔 기능 및 인수#

에서 함수를 생성하려면pl/토토 캔언어, 표준 사용함수 만들기구문 :

함수 만들기funcName(Argument-types) 반환return-type$$
    # pl/토토 캔 기능 본문
$$ 언어 pltcl;

pl/토토 캔u언어가로 지정되어야한다는 점을 제외하고는 동일합니다.pl토토 캔u.

함수의 본문은 단순히 토토 캔 스크립트입니다. 함수가 호출되면 인수 값은 토토 캔 스크립트로 전달됩니다.1 ... n. 결과는 A와 함께 일반적인 방식으로 토토 캔 코드에서 반환됩니다.return진술. 절차에서 토토 캔 코드의 반환 값은 무시됩니다.

예를 들어, 두 개의 정수 값 중 더 큰 것을 반환하는 함수는 다음과 같이 정의 될 수 있습니다.

함수 생성 토토 캔_max (정수, 정수) 정수를 $$로 반환합니다
    if $ 1 $ 2 return $ 1
    $ 2를 반환합니다
$$ 언어 pltcl 엄격한;

조항 참고엄격한, NULL 입력 값에 대해 생각하지 않아도됩니다. NULL 값이 전달되면 함수는 전혀 호출되지 않지만 자동으로 NULL 결과를 반환합니다..

NAMPLEST 기능에서, 인수의 실제 값이 null이면 해당$n변수가 빈 문자열로 설정됩니다. 특정 인수가 null인지 여부를 감지하려면 함수를 사용하십시오ArgisNull. 예를 들어, 우리가 원한다고 가정 해토토 캔_maxnull이 아닌 말이 아닌 인수를 반환하기 위해 하나의 null과 하나의 unnull 인수가 있습니다 :

함수 만들기 토토 캔_max (정수, 정수)는 정수를 $$로 반환합니다
    [ArgisNull 1] 인 경우
        if [ArgisNull 2] return_null
        $ 2를 반환합니다

    if [ArgisNull 2] return $ 1
    if $ 1 $ 2 return $ 1
    $ 2를 반환합니다
$$ 언어 pltcl;

위와 같이, pl/토토 캔 함수에서 null 값을 반환하려면 executereturn_null. 기능이 엄격한 지 여부에 관계없이 수행 할 수 있습니다.

복합 유형 인수는 토토 캔 어레이로 기능으로 전달됩니다. 배열의 요소 이름은 복합 유형의 속성 이름입니다. 전달 된 행의 속성에 널 값이 있으면 배열에 나타나지 않습니다. 예는 다음과 같습니다.

테이블 직원 생성 (
    이름 텍스트,
    급여 정수,
    시대 정수
);

기능 초과 지불 (직원)을 작성하여 부울을 $$로 반환합니다
    if 200000.0 <$ 1 (급여) 
        "T"반환

    if $ 1 (Age) <30 && 100000.0 <$ 1 (Salary) 
        "T"반환

    "F"반환
$$ 언어 pl토토 캔;

PL/토토 캔 기능도 복합 유형 결과를 반환 할 수 있습니다. 이렇게하려면 토토 캔 코드는 예상 결과 유형과 일치하는 열 이름/값 쌍의 목록을 반환해야합니다. 목록에서 생략 된 열 이름은 널로 반환되며 예기치 않은 열 이름이있는 경우 오류가 발생합니다. 예는 다음과 같습니다.

int, int, out squared int, out cubed int)를 $$로 만듭니다.
    반환 [목록 제곱 [expr $ 1 * $ 1] Cubed [expr $ 1 * $ 1 * $ 1]]
$$ 언어 pl토토 캔;

절차의 출력 인수는 예를 들어 같은 방식으로 반환됩니다.

절차 작성 토토 캔_triple (Integer, Inout B Integer) $$
    반환 [a list a [expr $ 1 * 3] b [expr $ 2 * 3]]
$$ 언어 pl토토 캔;

토토 캔_TRIPLE (5, 10); 전화하십시오.

결과 목록은 원하는 튜플의 배열 표현에서배열 get토토 캔 명령. 예를 들어:

기능 작성 Raise_Pay (Employee, Delta Int)는 직원을 $$로 반환합니다
    세트 1 (급여) [expr $ 1 (급여) + $ 2]
    반환 [배열 get 1]
$$ 언어 pltcl;

pl/토토 캔 함수는 세트를 반환 할 수 있습니다. 이렇게하려면 TCL 코드가 호출해야합니다return_next줄당 당 1 회 반환 할 때 스칼라 유형을 반환 할 때 적절한 값을 전달하거나 복합 유형을 반환 할 때 열 이름/값 쌍의 목록을 전달합니다. 다음은 스칼라 유형을 반환하는 예입니다.

함수 시퀀스 생성 (int, int)은 int를 $$로 반환합니다
    for set i $ 1 $ i <$ 2 incr i 
        return_next $ i

그리고 여기에 복합 유형을 반환하는 하나가 있습니다 :

기능 작성 table_of_squares (int, int) 반환 테이블 (x int, x2 int)을 $$로 반환합니다.
    for set i $ 1 $ i <$ 2 incr i 
        return_next [list x $ i x2 [expr $ i * $ i]]

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면