TCL에서 다른 프로 시저 범위 내에 만 존재하는 프로 시저를 만들고 싶습니다.
I. 1 proc 만 호출 할 수 있습니다. 가능한가? 이 다음 링크에 따르면, 아니오. : http://wiki.tcl.tk/463
하지만 어쩌면 누군가 다른 방법을 알고 있습니다.
감사합니다.TCL의 로컬 프로 시저
0
A
답변
0
Tcl의 철학은 제한하는 것이 아니라 가능하게합니다. 프로그래머는 올바른 일을 할 수 있다고 믿습니다.
소프트 제한 절차에 네임 스페이스, 동일 인터프리터 별칭 또는 OO를 사용할 수 있습니다. 실수로 호출 할 수는 없지만 고의적 인 조치를 통해 액세스 할 수 있습니다. 모듈 절차는 종종 다음과 같이 제한됩니다. struct::matrix
어떻게 할 수 있는지 확인하십시오.
절차를 완전히 보류하거나 특정 절차에서 호출 된 경우와 같이 특수한 상황에서만 호출 할 수있는 통역사 인 샌드 박스에서 프로그램을 실행하여 엄격하게 제한하는 절차입니다.
(하나는 단순히 발신자가 누구인지 확인하는 절차를 쓸 수 있지만, 그 스푸핑하기 쉽습니다.) 식별자는 현지함으로써 절차에 대한 액세스를 제한어휘 범위 지정의 기능을하는 티클 아무튼입니다 사용하지 마십시오. 가장 가까운 대응 메커니즘은 네임 스페이스입니다.
1
당신은 그런 절차를 제한 할 수 없습니다,하지만 당신은 거의 좋은 람다 용어를 사용할 수 있습니다 람다의
proc outside {a b c} {
# Lambda terms are two- or three-element lists.
set inside {{d e f} {
return [expr {$d + $e * $f}]
}}
set total 0
for {set i $a} {$i < $b} {incr i} {
# Lambdas have to be explicitly applied with [apply]
set total [apply $inside $total $c $i]
}
return $total
}
puts [outside 3 7 18]
첫 번째 요소 (proc
만) 형식 인수의 목록을
두 번째 람다 : body의 요소 (proc
)
세 번째 선택 사항 : lambda : context 네임 스페이스의 기본 요소는 글로벌 네임 스페이스 (::
)