tcl에 C++ #define과 동일한 명령이 있습니까? 나는 proc 함수의 오버로딩을 사용하여 "정의"를 구현하는 방법을 보았고, 누군가가 더 근원적 인 방법을 알고 있는지 알고 싶었다.tcl에서 #define과 동일합니까?
답변
Tcl은 통역에 aliases to procedures을 정의 할 수있는 메커니즘이 있습니다.
당신이
proc foo {one two three} {do something with $one $two $three}
이 있고 당신은 항상 $ a를 전달하고 $ 처음 두 인자로, 당신이 쓸 수 b를하고 찾을 경우 : 당신이 말할 수있는 지금
interp alias {} foo_ab {} foo $a $b
을 그리고 :
foo_ab $d ;# same as "foo $a $b $d"
foo_ab $e ;# same as "foo $a $b $e"
예 :
proc foo {one two three} {puts [join [list $one $two $three] :]}
set a Hello
set b World
interp alias {} foo_ab {} foo $a $b
foo_ab example ;# prints "Hello:World:example"
interp alias
명령의 빈 괄호는 현재 해석기를 나타냅니다. 슬레이브 통역사를 통해 많은 재미있는 일을 할 수 있습니다.
interp alias {} foo_ab {} foo $a $b
당신이 호출 될 때 값을 사용해야하는 경우, 당신이 필요합니다
는"동일한 인수를 받는다"는 것은 동일한 것을 반복적으로 전달한다는 의미이다 값이 $a
, $b
및 $c
인 경우 함수 매개 변수 대신 전역 변수를 사용하는 것이 좋습니다. 함수를 호출하기 전에 값을 저장 한 다음 함수 호출을 foo $d
등으로 단순화하십시오.
또는 d 및 e를 모두 기본값으로 입력 매개 변수로 사용할 수 있도록 정의 할 수 있습니다 (예 : 빈 문자열).
proc foo {a b c {d ""} {e ""} }.....
당신은
args
예를 들어, 각각의 값을 포함하는 목록을 만들 것입니다 당신이 단어
args
을 사용할 수 있습니다 입력 매개 변수의 알 수없는 번호를 가질려고하는 경우
proc foo {a b c args } {
foreach bar $args {
#do whatever...
}
}
환호 브라이언
현재, 디폴트의 파라미터는 인수리스트의 말미에만 붙을 수 있습니다 (말미의'args'를 제외하다). –
interp alias
의 사용은 별명이 생성 된 시간에 a
및 b
의 내용을 사용할 수 있습니다 대신 도우미 절차 :
proc foo_ab args {
global a b
uplevel 1 [list foo $a $b {*}$args]
# Or this in older Tcl: uplevel 1 [list foo $a $b] $args
}
,이 또한 별칭과 apply
로 기록 될 수있다
interp alias {} foo_ab {} apply {args {
global a b
tailcall foo $a $b {*}$args
}}
당신은이 같은 다른, 더러운 트릭 사용할 수 있습니다 :
8.6에서는 tailcall
를 사용하여 더욱 최적화 할 수 있습니다
interp alias {} foo_ab {} namespace inscope :: {foo $a $b}
하지만 특히 빠른 아니지만, 그렇습니다 모든 Tcl 8. * 버전에서 작동합니다.
변수'a'와'b'가 전역 변수가 아닌 경우'global a b '를'upvar 1 a a;로 바꿀 수 있습니다. upvar 1 b b가 proc/apply에서 그들에 접근한다. –
'eval {foo $ a $ b} '에 대한 앨리어싱은 효과가 없지만 확장 수준이 더 높다. –
- 1. #Define과 Float의 차이점은 무엇입니까?
- 2. 변수의 값을 #define과 비교하는 방법
- 3. Tcl에서 sendmail을 사용하는 방법
- 4. Tcl에서 공백은 빈 문자열입니까?
- 5. tcl에서 부동 소수점 비교
- 6. TCL에서 글로벌 키워드 사용
- 7. ActionScript 2.0에서 C의 #define과 같은 것이 있습니까?
- 8. Tcl에서 배열을 초기화하는 방법은 무엇입니까?
- 9. TCL에서 백 슬래시는 무엇을 의미합니까?
- 10. tcl에서 dll loadable을 컴파일하는 방법
- 11. Tcl에서 다운로드가 중단되는 문제 처리
- 12. TCL에서 Bash 환경 변수 읽기
- 13. tcl에서 배열 목록을 얻는 방법
- 14. TCL에서 해시 해시를 생성하고 반복하는 방법은 무엇입니까?
- 15. HTTP session을 유지하고 Curl TCL에서 작업을 얻으십시오.
- 16. Tcl에서 Expect를 필요로하는 여러 스레드에서 오류가 발생했습니다.
- 17. Tcl에서 데이터 구조를 만드는 방법은 무엇입니까?
- 18. Tcl에서 문자열을 간결하게 연결하는 방법은 무엇입니까?
- 19. TCL에서 Blowfish를 사용하는 기본 매개 변수
- 20. 'yield self'는 instance_eval과 동일합니까?
- 21. 모든 MVC 플랫폼이 동일합니까?
- 22. .Net 3.5에서 Expression.Assign과 동일합니까?
- 23. 두 코드가 서로 동일합니까?
- 24. 종속성 워커는 Linux와 동일합니까?
- 25. PostbackUrl은 Form.Submit과 동일합니까?
- 26. GetWebResourceUrl은 ASP.NET MVC와 동일합니까?
- 27. nodejs는 PHPlivedocx와 동일합니까?
- 28. .NET JAXB와 동일합니까?
- 29. win2k의 TzSpecificLocalTimeToSystemTime()과 동일합니까?
- 30. XCode의 "ListBox"와 동일합니까?
* 정말로 *하려고합니까? 컴파일 타임 해킹은 동적 언어에서 가치가 거의 없습니다. – delnan
나는 foo $ a $ b $ c $ d와 foo $ a $ b $ c $ e 을 반복하는 함수를 가지고 있으므로 foo_e와 foo_d를 모두 대신 정의하려고합니다. –