Main Content

validateattributes로 함수 입력값 검사하기

validateattributes 함수를 사용하여 함수에 대한 입력값이 일련의 요구 사항을 준수하는지 확인합니다.

validateattributes를 사용하려면 검사할 변수와 해당 변수에 대해 지원되는 데이터형을 전달해야 합니다. 필요한 경우, 유효한 차원 또는 값을 설명하는, 일련의 특성(Attribute)도 전달합니다.

데이터형(Data Type)과 기타 특성(Attribute) 검사

checkme.m이라는 파일에 최대 3개의 입력값(a, b, c)을 받는 함수를 정의합니다. 다음 여부를 검사합니다.

  • a가 양의 배정밀도 값으로 구성된 2차원 배열이다.

  • b가 10개의 열을 갖는 배열에 100개의 숫자형 값을 포함한다.

  • c가 비어 있지 않은 문자형 벡터이거나 셀형 배열이다.

function checkme(a,b,c)

validateattributes(a,{'double'},{'positive','2d'})
validateattributes(b,{'numeric'},{'numel',100,'ncols',10})
validateattributes(c,{'char','cell'},{'nonempty'})

disp('All inputs are ok.')

중괄호 {}는 데이터형 세트와 추가 특성(Attribute) 세트가 셀형 배열에 있음을 나타냅니다. 셀형 배열을 사용하면 텍스트와 숫자형 데이터의 조합 또는 서로 다른 길이의 문자형 벡터를 단일 변수에 저장할 수 있습니다.

유효한 입력값을 사용하여 checkme를 호출합니다.

checkme(pi,rand(5,10,2),'text')
All inputs are ok.

size(pi) = [1,1]이므로 스칼라 값 pi는 2차원입니다.

유효하지 않은 입력값을 사용하여 checkme를 호출합니다. validateattributes 함수는 유효성 검사에 실패하는 첫 번째 입력값에 대해 오류를 발생시키고 checkme는 처리를 중지합니다.

checkme(-4)
Error using checkme (line 3)
Expected input to be positive.
checkme(pi,rand(3,4,2))
Error using checkme (line 4)
Expected input to be an array with number of elements equal to 100.
checkme(pi,rand(5,10,2),struct)
Error using checkme (line 5)
Expected input to be one of these types:

  char, cell

Instead its type was struct.

디폴트 오류 메시지는 일반 용어인 input을 사용하여 유효성 검사에 실패한 인수를 참조합니다. 디폴트 오류 메시지를 사용하는 경우 실패한 입력값을 확인하는 유일한 방법은 checkme에 지정된 코드 라인을 확인하는 것입니다.

오류에 입력값 이름 및 위치 추가

checkdetails.m이라는 파일에 checkme와 동일한 유효성 검사를 수행하지만 입력값 이름 및 위치에 대한 세부 정보를 오류 메시지에 추가하는 함수를 정의합니다.

function checkdetails(a,b,c)

validateattributes(a,{'double'},{'positive','2d'},'','First',1)
validateattributes(b,{'numeric'},{'numel',100,'ncols',10},'','Second',2)
validateattributes(c,{'char'},{'nonempty'},'','Third',3)

disp('All inputs are ok.')

validateattributes의 네 번째 입력값에 대한 빈 문자형 벡터 ''은 선택적 함수 이름에 대한 자리 표시자입니다. 함수 이름은 오류 메시지에 이미 표시되기 때문에 지정할 필요가 없습니다. 추가적인 오류 처리를 위해 오류 ID에 포함시키려는 경우에 함수 이름을 지정하십시오.

유효하지 않은 입력값을 사용하여 checkdetails를 호출합니다.

checkdetails(-4)
Error using checkdetails (line 3)
Expected input number 1, First, to be positive.
checkdetails(pi,rand(3,4,2))
Error using checkdetails (line 4)
Expected input number 2, Second, to be an array with
number of elements equal to 100.

참고 항목

|