Tuesday, June 23, 2009

MEL 함수정의 순서로 인한 error 해결법

멀쩡하던 MEL이 함수정의 순서를 바꾸니까 에러가 나는 경우가 있다.
이럴때는 호출하는 쪽에서 타입을 명확히 해서 argument 를 넘겨주면 문제가 해결된다.

--------------------------------
사례)

예를 들면 andy rig 즉 JTD Rigging Tool 사용시, 함수정의 순서가 바뀌면 문제가 생기는 일이 있다.
결론부터 말하면 이것은 float array 를 argument 로 받는 함수를 호출할때
{1.0, 2.0} 와 같이 넣어주지 않고 {1, 2} 와 같이 넣어주어 생기는 문제이다.

---------------------------------
설명)

MEL 에서 함수 정의 순서는, mainFunc() 가 sub() 를 부른다고 할때
정의 순서는 원칙적으로 상관이 없다.

하지만 실제 사용중에 문제가 생기는 경우가 있는데
예를 들어 sub() 가 argument 로 float[] 를 쓰는 경우,
mainFunc() 에서 {1.0, 2.0} 또는 {(float)1, (float)2} 와 같이 주면 문제가 안생기지만
그냥 {1, 2} 라고 주면 문제가 생긴다.

float array 를 {1.0, 2.0} 처럼 철저하게 소수점까지 찍어주지 않고
{1, 2} 처럼 부르는 버릇이 있다면, sub() 가 mainFunc() 보다 뒤에 정의되었을 경우
int[] 를 float[] 로 변환할 수 없다는 type error 를 낸다.

왜냐하면 아직 정의되지 않은 함수를 부를 때 호출하는 쪽에서 int array 를 넣어준다면
MEL 은 자동적으로 그 호출되는 함수의 array 타입이 int array 일 것이라고 가정하기 때문이다.

No comments:

Post a Comment