이전: 이름으로 함수 호출, 상위 문서: 풀이 [차례][찾아보기]
표현식을 평가하기 전에 표현식에 사용한 변수를 값으로 바꾸어야 합니다. 이는 상징표에 있습니다. 해석기가 새 함수를 읽기 시작할 때마다, 새
함수를 현재 상징표에 저장하고 새 상징표를 만들어 함수 매개변수 목록과 nargin
같은 미리 정의된 변수 몇 개로
초기화 합니다. 함수에 안긴 표현식은 새 함수표를 사용합니다.
가끔은 함수를 작성하고, 함수를 호출하면 자체적인 문맥에서 함수가 변수를 건들 필요가 있습니다. C 같은 풀그림 짜기 언어에서 지시기를 사용하는 것과 비슷하게 이름으로 접근 꼴인 함수로 이를 행합니다.
save
와 load
를 m 기록철에서 어떻게 하는지 생각해 보십시오. 예시:
function create_data x = linspace (0, 10, 10); y = sin (x); save mydata x y endfunction
evalin
를 함께 쓰면, save
를 아래처럼 쓸 수 있습니다.
function save (file, name1, name2) f = open_save_file (file); save_var (f, name1, evalin ("caller", name1)); save_var (f, name2, evalin ("caller", name2)); endfunction
‘caller’는 create_data
함수이고, name1
은
평가하면 단순히 x
값인 문자열 "x"
입니다.
다른 문맥에서 mydata
의 값을 다시 불러오려고 합니다.
function process_data load mydata … do work … endfunction
evalin
를 함께 쓰면, load
를 아래처럼 쓸 수 있습니다.
function load (file) f = open_load_file (file); [name, val] = load_var (f); assignin ("caller", name, val); [name, val] = load_var (f); assignin ("caller", name, val); endfunction
‘caller’가 process_data
함수입니다.
명령 처리기에서 문맥 ‘caller’가 아닌 ‘base’에서 변수를 설정하고 사용할 수 있습니다.
실제로는 이 함수를 잘 쓰지 않습니다. 한 예시는, ‘code’를 호출자의 문맥에서 평가하고 출력한 오류 문구가 준
양상과 일치하는지 확인하는 fail (‘code’, ‘pattern’)
함수입니다. save
와 load
같은 다른 예시는, 모든 옥타브 변수가 ‘caller’ 문맥 안에 있고, evalin
가 필요없는
C++로 작성하였습니다.
"caller"
나 "base"
같은 문맥
문맥 안에서 표현식을 평가한다는 점만 빼면 eval
과 같습니다.
"base"
나 "caller"
같은 문맥
문맥 안에 있는 변수_이름에 값을 할당합니다.
같이 보기: evalin.
이전: 이름으로 함수 호출, 상위 문서: 풀이 [차례][찾아보기]